Hibernate 将浮点数类型设置为 BigDecimal,保证计算的精确性

浮点计算精度损失的文章比较多,我就不多说了,搜了一篇,见参考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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值