通过对数字、字符串使用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的除法,预算结果会根据情况自动提升精度,且不低于被除数的精度,但出现除不尽的情况时会报错,如
10.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