BigDecimal/numeric 的 Java 和 postgres 值的区别

Difference between Java and postgres value of BigDecimal/numeric

提问人:Bob 提问时间:2/24/2020 更新时间:2/24/2020 访问量:3072

问:

我在 Java 项目中使用 BigDecimal 类型。我正在尝试使用带有数值字段的函数来保存它。Java 和 postgres 具有不同的价值。例如,Java 中的值 56.97 在 postgres 中保存为 56.96999999999999989。我该如何预防?

java postgresql 精度 数字大 十进制

评论

1赞 2/24/2020
数据库中列的数据类型到底是什么?
0赞 Kayaman 2/24/2020
..您如何在 Java 端节省价值?
1赞 Alex Sveshnikov 2/24/2020
检查这个问题:应该使用哪种 PostgreSQL 列类型来存储 Java BigDecimal?
2赞 2/24/2020
如何在 SELECT 语句中将该值转换为数字?varchar
2赞 Kayaman 2/24/2020
@Bob与其描述你在做什么,不如编辑问题并显示代码的相关部分。通过将数字数据存储为文本,您已经做错了一件事,但您可能也做错了其他事情。

答:

5赞 Buddy Christ 2/24/2020 #1

如果您转到 postgresql 文档:https://www.postgresql.org/docs/current/datatype-numeric.html

我猜您正在使用实精度或双精度,它们被描述为“可变精度,不精确”。

如果你希望它是准确的,假设我们正在谈论金钱或类似的东西,那么你应该使用或输入:numericdecimal

NUMERIC(precision, scale)

精度是总位数,而小数位数是分数部分的位数。

例如,数字 1234.567 的精度为 7,小数位数为 3。

评论

1赞 Laurenz Albe 2/24/2020
Java 不是“真正的或双精度”。BigDecimal
0赞 Buddy Christ 2/25/2020
在PostgreSQL中,实精度或双精度是postge中的数值类型。但是,如果您需要精确的数据,则应使用数字或十进制。
0赞 Laurenz Albe 2/25/2020
啊,我现在明白了。OP在说“数字”时并不是故意的。numeric