【发布时间】:2011-08-09 16:39:51
【问题描述】:
我在我的 Oracle 11g 中将此列映射为 NUMBER (21,20),在 Hibernate 中映射为:
@Column(name = "PESO", precision = 21, scale = 20, nullable = false)
public BigDecimal getWeight() {
return weight;
}
对于列值为 0.493 的特定记录,我得到一个值为 0.49299999999 的 BigDecimal。 似乎某个地方由于(可能)由于 Double 或 Float 转换而导致精度损失,但我无法通过像这样的简单单元测试来追踪它:
Double d = new Double("0.493");
System.out.println((d));
该代码的任何变体,使用 Float、BigDecimal 和各种构造函数都会给出相同的结果:“0.493”... 关于我应该如何映射列以避免此类问题的任何提示? 我正在使用带有 JPA 注释和 Hibernate API(即 Session 而不是 EntityManager)的 Hibernate 3.5.6
【问题讨论】:
-
看来这不是休眠故障...这完全在 SquirrelSql 上,它显示 0.493 的值为 0.49299999999...该值一直是那个,在“源”文件中,都在数据库中,正如 SqlDeveloper 报告的那样。
标签: java oracle hibernate double bigdecimal