浮点计算精度损失的文章比较多,我就不多说了,搜了一篇,见参考1。
设置方式如下:
大数字有精度precision和小数位scale两个参数可设置,精度的位数是包含小数位数的,即整数位=精度-小数位。对于超过小数位的小数,用四舍五入法进行截取。
运算过程中保留6位小数,保存到数据库时保留4位小数。
Hibernate的配置中精度用默认值(19),精度设为4,格式如下:
<propertyname="price" type="java.math.BigDecimal">
<column name="price"scale="4" />
</property>
由于BigDecimal类型的数据不能直接用==判断相等,因此在现有代码中用这比较的部分,需要替换为用compare函数的比较,如a.compareTo(b) == 0。运算均需要调用对应的函数,如:
加:a.add(b)
减:a.subtract(b)
乘:a.multiply(b)
除:a.divide(b, 2, BigDecimal.ROUND_HALF_EVEN)
模:a.remainder(b)
比较:a.compareTo(b)==0
参考资料:
1.java 浮点数表示详解.http://hujiantao224.iteye.com/blog/727155
本文介绍如何通过设置精度和小数位来控制浮点数的精度损失问题,并使用Hibernate框架中的BigDecimal类型进行数据库操作,同时提供了基本的算术运算方法。
224

被折叠的 条评论
为什么被折叠?



