BigDecimal可以实现对浮点数的运算,不会造成精度丢失。
float a = 1.0f - 0.9f;
float b = 0.9f - 0.8f;
System.out.println(a);// 0.100000024
System.out.println(b);// 0.099999964
System.out.println(a == b);// false
所以用BigDecimal。
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); /* 0.1 */
System.out.println(y); /* 0.1 */
System.out.println(Objects.equals(x, y)); /* true */
但是:double就没有这个问题,就
double a = 1.0 - 0.9;
double b = 0.9 - 0.8;
System.out.println(a); //0.09999999999999998
System.out.println(b); //0.09999999999999998
System.out.println(a == b); //true
以后碰到实际问题再说。。。。。
大小比较
`a.compareTo(b)` : 返回 -1 表示 `a` 小于 `b`,0 表示 `a` 等于 `b` , 1表示 `a` 大于 `b`。
保留几位小数
通过 `setScale`方法设置保留几位小数以及保留规则
BigDecimal m = new BigDecimal("1.255433");
BigDecimal n = m.setScale(3,BigDecimal.ROUND_HALF_DOWN);
System.out.println(n);// 1.255
注意:我们在使用BigDecimal时,为了防止精度丢失,推荐使用它的 **BigDecimal(String)** 构造方法来创建对象。用字符串或者tostring方法。