我想在小数点后只打印一位数。
所以我写道:
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
)?
任何帮助表示赞赏!
答案 0 :(得分:2)
要打印浮点数,如果它们大于或等于两个可能输出的“中间”,则会向上舍入,因此-0.05
会故意变为-0.0
。
如果负数也被有意地舍入为零,则结果为负零。内部浮点格式(IEEE 754)区分负零和正零(see this link),似乎C ++输出流坚持这种行为。
您可以通过分离打印符号和浮点数的绝对值来克服这两个问题。
cout << (number <= -.05 ? "-" : "") << abs(number);
比较说明:对于等于或小于-0.05
的数字,舍入abs(number)
(即>= 0.05
)将为非零,所以只有这样你才需要符号出现。
请注意,此比较中的阈值取决于您选择的输出格式。因此,您应该在代码中将此打印方法保持为本地,您要知道要打印浮动指针的确切格式。
注意:float
和double
在这些方面表现完全相同。