天天看点

java.math.BigDecimal 的使用

1:问题场景:在金额的计算中, 会出现精度丢失的情况。

    数字计算时,计算机会将数字转换为最近似的二进制,在进行计算,这就会导致计算结果精度不正确。

    例如:0.1+0.2 =0.30000000000000004   。这个问题在众多编程语言中都出现过。

2:解决办法:这个问题在java中是使用java.math.BigDecimal进行计算。

3:常用方法:加减乘除,比较大小,是否为0,保留n为小数,向上向下,四舍五入。

      A : 加减乘除   

          BigDecimal  num= new BigDecimal ("10");

          num.add(num);

          num.subtract(num);

          num.multiply(num);

          num.divide(num);

     B :比较大小,是否为0

         num.compareTo(num)==1

         这个方法结果有-1 ,0 ,1 分别表示小于,大于,等于

         BigDecimal.ZERO 则表示0

      C:保留n位小数,向上向下取整,四舍五入,当出现无限循环小数时使用

         setScale的第一个参数是小数位数, 这个示例是保留2位小数, 后面是四舍五入规则.

         直接移除n位:

         num.setScale(n,BigDecimal.ROUND_DOWN)

         进位:

         num.setScale(n,BigDecimal.ROUND_UP)

         四舍五入,5进位

         num.setScale(n,BigDecimal.ROUND_HALP_UP)

         四舍五入,5舍弃

         num.setScale(n,BigDecimal.ROUND_HALP_DOWN)

     D:当小数位过长出现科学计算法时,去除末尾0,方法:stripTrailingZeros() 。不显示科学计算法 转换string。

        num.stripTrailingZeros().toString()