【发布时间】:2014-09-29 21:45:37
【问题描述】:
我刚刚遇到this 网站并尝试在 Java 和 C++ 中执行此操作。为什么用 Java 编写以下代码会给出 0.30000000000000004
double x = 0.1 + 0.2;
System.out.print(x);
而用 C++ 编写以下代码会得到 0.3?
double x = 0.1 + 0.2;
cout<<x;
【问题讨论】:
-
在 C++ 中,以更高的精度打印:
cout << setprecision(15) << x。我预测结果是一样的,它只是在 Java 中默认打印更多的数字。 -
了解
print和cout格式选项 -
@RuchiraGayanRanaweera 你知道“实际”发生了什么吗?
-
默认情况下,C++ 输出流运算符打印六位数的浮点值。如果这六位数字在小数点后有尾随零,则零将被删除。
-
@MattAdams 谢谢马特!知道了!所以,我们要用 C++ 做的是
std::cout<<std::setprecision(17)<<std::fixed<<x;以获得相同的输出。他们将其搁置为“太宽泛”! :D