何时使用BigDecimal而不是double。为什么下面的代码会显示出来

时间:2018-04-06 18:18:34

标签: java core

使用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

1 个答案:

答案 0 :(得分:0)

这件事发生在我的某个时候,当我在一家金融公司工作时,计算上1美分的差异让我在整个周末工作。

这一切都取决于浮点数(有两个部分尾数和指数)是如何存储在硬件中的,并且总是附加一个精度属性。

双精度具有相同的精度属性(指定它的精确程度)。

BigDecimal是浮点数的精确表示,没有precision。因此,对于任何财务计算,BigDecimal是在.0001的差异很重要的地方。话虽如此,与使用double相比,速度较慢。

你应该给BigDecimal javadoc读一读,这将是一个很好的阅读并启发你。