打印时将双数四舍五入

Round a double number when printing to cout

本文关键字:四舍五入 打印      更新时间:2023-10-16

我只想打印小数点后的一位数字。

所以我写:

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.00.0)。我应该如何改变我的代码,在-0.0的情况下,它将打印0.0 ?

关于第二行,为什么不打印0.0(或-0.0)?

感谢任何帮助!

要打印浮点数,如果它们大于或等于两个可能输出的"中间",则将其四舍五入,因此-0.05有意变为-0.0

负零是指将一个负数四舍五入为零的结果,也是有意为之。内部浮点格式(IEEE 754)区分负零和正零(参见此链接),似乎c++输出流坚持这种行为。

可以通过将符号和浮点数的绝对值分开打印来解决这两个问题。

cout << (number <= -.05 ? "-" : "") << abs(number);

比较说明:对于等于或小于-0.05的数字,将abs(number)四舍五入(即>= 0.05)将是非零的,因此只有在这种情况下您才希望出现符号。

注意,这个比较中的阈值取决于您选择的输出格式。因此,您应该在代码中尽可能地保持这个打印方法的局部化,因为您知道要打印浮点指针的确切格式。

生活例子

注意:floatdouble在这些点上的行为完全相同。