在金融行业内,一般情况下使用浮点数计算时结果会有精度上的问题,比如说double和float:
double a = 0.1;
double b = 0.2;
此时的 a + b 并不是等于0.3 ,而是等于0.30000000000004 。
这是因为十进制小数在转化到二进制进行运算的过程中,会有精度丢失的问题,导致结果和理论结果不一致。
所以说,为了解决这种问题导致的数据问题,我们通常使用Bigdecimal类来解决问题。
一般使用如下方法来进行运算:
BigDecimal add(BigDecimal augend) 加法运算
BigDecimal subtract(BigDecimal subtrahend) 减法运算
BigDecimal multiply(BigDecimal multiplicand) 乘法运算
BigDecimal divide(BigDecimal divisor) 除法运算
并且,一般来使用valueOf方法来将浮点数包装成Bigdecimal类数据:
Bigdecimal b1 = Bigdecimal.valueOf(b);
在对浮点数包装完后,就可以使用Bigdecimal类的计算方法来对数据进行处理和计算,但是,Bigdecimal只是解决精度问题的手段,最后的数据才是我们的目的,所以说最好在计算完数据后将数据变回原来的类型:
double b2 = b1.doubleValue();