3

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

所以我写:

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)?

任何帮助表示赞赏!

4

1 回答 1

2

为了打印浮点数,如果它们大于或等于两个可能输出的“中间值”,则将它们向上取整,因此-0.05-0.0有意的。

如果负数被四舍五入为零,则结果为负零,也是有意的。内部浮点格式 (IEEE 754) 区分负零和正零(请参阅此链接),并且 C++ 输出流似乎坚持这种行为。

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

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

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

请注意,此比较中的阈值取决于您选择的输出格式。所以你应该在你的代码中尽可能地保持这种打印方法的本地化,在那里你知道你想要打印浮动指针的确切格式。

活生生的例子

注意:float并且double在这些点上表现完全相同。

于 2013-05-25T11:17:36.993 回答