BigDecimal出现的原因:我们的计算机是二进制的,浮点数是没有办法用二进制来进行精确表示的。我们的CPU表示浮点数由两个部分组成:指数和尾数,这样的表示方法一般都会失去一定的精确度,有些浮点数运算也会产生一定的误差。
如:2.4的二进制表示并非就是精确的2.4。反而最为接近的二进制表示是 2.3999999999999999。浮点数的值实际上是由一个特定的数学公式计算得到的。
BigDecimal有两个特殊的构造函数,一个是零一个是一(其实和别的构造函数没有什么不同,就是调用起来更加方便),一般构造BigDecimal有三种方法:
1.public BigDecimal(double val) 将double表示形式转换为BigDecimal *不建议使用、有些小数无法被准确的表示,我们很多情况下使用BigDecimal就是避免使用double时出现问题。
2.public BigDecimal(int val) 将int表示形式转换成BigDecimal
3.public BigDecimal(String val) 将String表示形式转换成BigDecima,*建议优先使用,因为可以很好的表示小数,整数也可以很好的表示,避免了使用double出现问题和使用int无法转换小数的问题。
关于BigDecimal的运算,关于BigDecimal的运算记住一点,计算时一定要接一下,否则和没有做运算一样。 比如使用时候a.add(b); System.out.println(a);打印出来则是4.5,而a = a.add(b);System.out.println(a);打印出来则是6
四则运算:
public BigDecimal add(BigDecimal value);//加法 public BigDecimal subtract(BigDecimal value);//减法 public BigDecimal multiply(BigDecimal value);//乘法 public BigDecimal divide(BigDecimal value);//除法注意直接使用的时候一定要注意除法的使用我们一定要小心出现不能整除的现象,使用除法时最好使用divide(BigDecimal divisor, int scale, int roundingMode)这个方法,这个方法可以很好的避免以上的问题。 同时感觉有一个很好用的方法.stripTrailingZeros().toPlainString(),这个可以去掉多余的0,让显示的数据更加清晰。
BigDecimal a = new BigDecimal ("0.10000"); System.out.println(a.stripTrailingZeros().toPlainString());//显示0.1参考:
https://www.jianshu.com/p/50b369988239
https://www.cnblogs.com/YangJavaer/p/6056394.html
