使用BigDecimal
代替double
时,为什么当第4行打印0.01
时第8行打印0.009999999999999998
?
double a = 0.02;
double b = 0.03;
double c = b - a;
System.out.println(c); // line #4 prints 0.009999999999999998
BigDecimal _a = new BigDecimal("0.02");
BigDecimal _b = new BigDecimal("0.03");
BigDecimal _c = _b.subtract(_a);
System.out.println(_c); // line #8 prints 0.01
答案 0 :(得分:0)
这件事发生在我的某个时候,当我在一家金融公司工作时,计算上1美分的差异让我在整个周末工作。
这一切都取决于浮点数(有两个部分尾数和指数)是如何存储在硬件中的,并且总是附加一个精度属性。
双精度具有相同的精度属性(指定它的精确程度)。
BigDecimal
是浮点数的精确表示,没有precision
。因此,对于任何财务计算,BigDecimal是在.0001的差异很重要的地方。话虽如此,与使用double
相比,速度较慢。
你应该给BigDecimal
javadoc读一读,这将是一个很好的阅读并启发你。