这个问题在这里已经有答案了:
浮点数学坏了吗((31个答案)
上个月关门了。
import java.text.*;
public class TryStuffOut {
public static void main(String[] args) {
double n=12323233.445;
DecimalFormat x = new DecimalFormat("#.##");
System.out.println(x.format(n));
}
}
为什么要把小数部分四舍五入到.44,当我把变量n换成 double n=12323233.415;
总共是0.42。为什么?在数字前面的#是否与我有多少个数字有关,因为它似乎仍然打印出整个数字,即使我只有1磅符号。
谢谢
1条答案
按热度按时间67up9zun1#
解释
由于浮点精度有限
double
价值观并不是你想要的。实际上,这些值是:
舍入必须与此一起工作,因此它向上舍入第一个值,向下舍入第二个值。
请注意,你的观察是不正确的,它是完全相反的。您声称第一个值将向下舍入,而第二个值将向上舍入。但执行它会产生相反的行为。而这种行为正是由于上述原因而得到解释的。
浮点数是根据iee754实现的,它精确地指定了它们在内部的工作方式。
代表
现在,问题是这些数字无法表示。规范说,它应该使用最接近的数字来代替。这正是这里发生的事情。
您可以在这里进一步检查和使用它:
https://float.exposed/0x416781342e3d70a4
https://float.exposed/0x416781342d47ae14