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相乘,也会出现精度丢失问题。

浙公网安备 33010602011771号