1、问题引入
float a = 2.0f - 1.9f;
float b = 1.8f - 1.7f;
System.out.println(a);
System.out.println(b);
System.out.println(a == b);
输出的结果分别为:
0.100000024
0.099999905
false
2、如何解决问题
BigDecimal可以实现对浮点数的运算,不会造成精度丢失。通常情况下,大部分需要浮点数精确运算结果的业务场景(比如涉及到钱的场景)都是通过BigDecimal来做的。
BigDecimal位于math包下。
BigDecimal a = new BigDecimal("1.0");
BigDecimal b = new BigDecimal("0.9");
BigDecimal c = new BigDecimal("0.8");
BigDecimal x = a.subtract(b);
BigDecimal y = b.subtract(c);
System.out.println(x);
System.out.println(y);
System.out.println(Objects.equals(x, y));
结果为:
0.1
0.1
true
3、 BigDecimal类型对象如何进行运算以及保留小数
BigDecimal.setScale()方法用于格式化小数点
例如:setScale(1,BigDecimal.ROUND_DOWN)直接删除多余的小数位,如1.55会变成1.5
setScale(1,BigDecimal.ROUND_UP)进位处理,1.55变成1.6
setScale(1,BigDecimal.ROUND_HALF_UP)四舍五入,1.55变成1.6
BigDecimal a = new BigDecimal("9.655").setScale(2, BigDecimal.ROUND_HALF_UP);
add():加法
subtract():减法
multiply():乘法
divide():除法