Kotlin关于BigDecimal计算精度的问题记录

 通过对数字、字符串使用toBigDecimal()方法,将其转为BigDecimal型

对于两个BigDecimal型数字运算,遵循以下规则

加法、减法:运算结果的精度取两者最高的精度,如

10.toBigDecimal() - 0.2.toBigDecimal()//结果为9.8
10.0.toBigDecimal() + 1.toBigDecimal()//结果为11.0

乘法:运算结果会根据情况自动提升精度,最低不低于两乘数的精度,如

10.0.toBigDecimal().multiply(5.00.toBigDecimal())//结果为50.00
10.1.toBigDecimal().multiply(5.01.toBigDecimal())//结果为50.601
10.0.toBigDecimal().multiply(5.01.toBigDecimal())//结果为50.100

除法:有两种运算函数

1.div:kotlin的除法,所得结果的精度等于被除数的精度,可以通过setScale方法调整精度,如

10.toBigDecimal().div(15.toBigDecimal())//结果为1
10.toBigDecimal().div(20.toBigDecimal())//结果为0
10.toBigDecimal().div(20.toBigDecimal().setScale(2))//结果为0
10.toBigDecimal().setScale(2).div(20.toBigDecimal())//结果为0.50

2.divide:java.math的除法,预算结果会根据情况自动提升精度,且不低于被除数的精度,但出现除不尽的情况时会报错,需要进行相关参数,如

110.toBigDecimal().divide(2.toBigDecimal())//结果为5
10.toBigDecimal().setScale(2).divide(2.toBigDecimal())//结果为5.00
10.toBigDecimal().divide(20.toBigDecimal())//结果为0.5
10.toBigDecimal().divide(3.toBigDecimal())//报错:Non-terminating decimal expansion; no exact representable decimal result

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值