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,因为其余的数据是浮动的。
答案 0 :(得分:0)
66996956和6.6996956E7是相同的值,显示方式不同。请参阅the documentation以了解为何以这种方式显示:
如果m小于10 ^ -3或大于或等于10 ^ 7,那么它是 以所谓的“计算机化科学记数法”代表。
如果你不介意浮动和双精度必然具有的精度损失(甚至更大的值),那么使用它们。如果你想要一个绝对精确的值,那么使用BigDecimal。