好徘徊...... 我有这个代码
double Restant = 0;
Restant = 0.15 - 0.10;
它给了我 0.049999999 谁能解释我为什么这样做? 在此之前,现在进行了奇怪的操作。
答案 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));