相关疑难解决方法(0)

将数字(22,21)映射到BigDecimal时,Hibernate在结果中的精度损失

我在Oracle 11g中将此列映射为NUMBER(21,20),它在Hibernate中映射为:

@Column(name = "PESO", precision = 21, scale = 20, nullable = false)
public BigDecimal getWeight() {
    return weight;
}
Run Code Online (Sandbox Code Playgroud)

对于列的值为0.493的特定记录,我得到一个BigDecimal,其值为0.49299999999.似乎某些地方由于(可能)Double或Float转换而导致精度损失,但我无法通过这样的简单单元测试来跟踪它:

Double d = new Double("0.493");
System.out.println((d));
Run Code Online (Sandbox Code Playgroud)

该代码的任何变体,使用Float,BigDecimal和各种构造函数都会得到相同的结果:"0.493"...有关如何映射列以避免此类问题的任何提示?我正在使用Hibernate 3.5.6,带有JPA注释和Hibernate API(即Session而不是EntityManager)

java oracle double hibernate bigdecimal

5
推荐指数
1
解决办法
7462
查看次数

标签 统计

bigdecimal ×1

double ×1

hibernate ×1

java ×1

oracle ×1