那么请看下面的例子
public static void main(String[] args) { double a = 0.03; double b = 0.02; double c = a - b; System.out.println(c); // 0.009999999999999998 float d = (float)0.03; float e = (float)0.02; float f = d - e; System.out.println(f); //0.01 }
结果会打印多少,大部分人肯定都在想结果肯定是0.01啊!结果居然是0.009999999999999998,因为float与double都是浮点数,浮点数参与的运算通常伴随着因为无法精确表示而进行的近似或舍入,所以导致结果会有丝毫的偏差,而涉及金额的计算是绝对不予许存在偏差的。
我们可以使用BigDecimal来表示金额,或者是通过将金额的单位变小用整数来表示金额。