我有一个 double,我正试图将其保存到 postgres 数字列。
我试图保存的值是 151.33160591125488,我已经验证这实际上是 Hibernates 内部预插入接收到的参数。
但是插入后数据库中的值为 151.331605911255,即它已四舍五入为 12dp。
我知道我的列是正确的比例,因为它是一个不受限制的数字列和以下...
update tbl set col=151.33160591125488
...具有预期的效果。
所以罪魁祸首必须是 Hibernate 或 postgres-JDBC 驱动程序。
想法?
编辑:
org.hibernate.dialect.PostgreSQLDialect:
registerColumnType( Types.DOUBLE, "float8" );
和
select cast (151.33160591125488 as float8);
=151.331605911255
因此,double 的默认行为是不正确的,因为它并不总是保存提供给它的 double。
有谁知道如何让 hibernate 在 postgres 中使用列类型“numeric”?
最佳答案
只要精度很重要,请使用 java.math.BigDecimal .这answer对此进行了非常详细的讨论。
关于java - hibernate 正在四舍五入我的两倍?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1575923/