Hibernate addScalar到Hibernate.FLOAT四舍五入

时间:2012-08-10 09:57:30

标签: java mysql hibernate floating-point

Query qry = session.createSQLQuery(qrystr)
.addScalar("id", Hibernate.INTEGER)
.addScalar("balance",Hibernate.FLOAT);

    Object[] headerDetails=(Object[])qry.uniqueResult();
    session.close();
    System.out.println("balance"+headerDetails[1]);

对于上述代码,当查询被执行时,数据库中的值66996956将返回为6.6996956E7。

即使是DOUBLE,输出也是6.6996956E7。但是当提供math.BIG_DECIMAL时,值是正确的。为什么double和float存在问题。在代码中我可以引入bigdecimal,因为其余的数据是浮动的。

1 个答案:

答案 0 :(得分:0)

66996956和6.6996956E7是相同的值,显示方式不同。请参阅the documentation以了解为何以这种方式显示:

  

如果m小于10 ^ -3或大于或等于10 ^ 7,那么它是   以所谓的“计算机化科学记数法”代表。

如果你不介意浮动和双精度必然具有的精度损失(甚至更大的值),那么使用它们。如果你想要一个绝对精确的值,那么使用BigDecimal。