BigDecimal 相关知识与问题点

1.加减乘除

  BigDecimal b1 = new BigDecimal("2");   

  BigDecimal b2 = new BigDecimal("3");  

  加法:b1.add(b2);

  减法:b1.subtract(b2);

  乘法:b1.multiply(b2);

  除法:1.div(b1,b2); //// b1 被除数   b2 除数 

     2.b1.divide(b2,scale,BigDecimal.ROUND_HALF_UP); // b1 被除数   b2 除数  scale 表示表示需要精确到小数点以后几位。

2.问题点

  1.浮点型会出现精度丢失问题,这个在计算金额的时候会很致命。

double num3 = 1.3;
  float num1 = 1.09f;
  BigDecimal a = new BigDecimal(num3);
  BigDecimal b = new BigDecimal(num4);
  System.out.println("a:"+a);
  System.out.println("b:"+b);

结果:
 a:1.3000000000000000444089209850062616169452667236328125
 b:1.09000003337860107421875

   解决方法:把浮点型变成String类型,再转BigDecimal ,例:

  BigDecimal a = new BigDecimal(String.valueOf(num3));

  如果不转String就与其他BigDecimal相乘,也会出现精度丢失问题。

 


 
posted @ 2022-09-01 10:07  你轻声说  阅读(32)  评论(0)    收藏  举报