我只想打印小数点后的一位数字。
所以我写:
double number1 = -0.049453;
double number2 = -0.05000;
cout.setf(ios::fixed,ios::floatfield);
cout.precision(1);
cout << number1 << endl;
cout << number2 << endl;
我的输出是:
-0.0
-0.1
我希望第一行是 0.0
(因为 -0.0
是 0.0
)。我应该如何更改我的代码,在 -0.0
的情况下,它将打印 0.0
?
关于第二行,为什么不打印0.0
(或-0.0
)?
感谢任何帮助!
最佳答案
为了打印 float ,如果它们大于或等于两个可能输出的“中间值”,它们将被四舍五入,所以 -0.05
故意变成了 -0.0
.
如果负数向上舍入为零,则结果为负零,这也是有意为之的。内部浮点格式 (IEEE 754) 区分负零和正零 ( see this link ),C++ 输出流似乎坚持这种行为。
您可以通过分开打印 float 的符号和绝对值来解决这两个问题。
cout << (number <= -.05 ? "-" : "") << abs(number);
比较说明:对于等于或小于-0.05
的数字,四舍五入abs(number)
(然后是>= 0.05
) 将是非零的,所以只有到那时你才希望符号出现。
请注意,此比较中的阈值取决于您选择的输出格式。因此,您应该在您的代码中尽可能将此打印方法保留在本地,您知道要打印 float 指针的确切格式。
注意:float
和 double
在这些点上的行为完全相同。
关于c++ - 打印到 cout 时舍入双数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16748818/