有人可以向我解释为什么0.15 - 0.10 = 0.049?

时间:2014-03-11 04:58:05

标签: java math

好徘徊...... 我有这个代码

double Restant = 0;
Restant = 0.15 - 0.10;

它给了我 0.049999999 谁能解释我为什么这样做? 在此之前,现在进行了奇怪的操作。

4 个答案:

答案 0 :(得分:2)

浮点不准确。使用阈值来确定特定结果是否“足够接近”以使其视为相等。例如。

double EPSILON = 0.0001;
double expected = 0.05;
double actual = 0.15 - 0.10;
boolean isEqual = Math.abs(actual - expected) < EPSILON;

或者,只使用Java的BigDecimal类

答案 1 :(得分:1)

浮点计算的结果通常必须舍入,以便适应其有限表示。该舍入误差是浮点计算的特征。请改用BigDecimal

答案 2 :(得分:1)

与定点数不同,浮点数有时会(安全地假设“大部分时间”)无法返回数字的精确表示。这就是为什么你最终得到11.399999999999作为5.6 + 5.8的结果。

如果需要定点运算,请改用BigDecimal。

答案 3 :(得分:0)

您应该根据需要限制小数位数。以下将给出预期结果:

System.out.println(String.format(“%。2f”,Restant));