【问题标题】:Round a double number when printing to cout打印到 cout 时舍入一个双数
【发布时间】:2013-05-25 10:54:56
【问题描述】:

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

所以我写:

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

任何帮助表示赞赏!

【问题讨论】:

    标签: c++ double rounding


    【解决方案1】:

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

    负零是负数舍入为零的结果,也是有意的。内部浮点格式 (IEEE 754) 区分负零和正零 (see this link),C++ 输出流似乎坚持这种行为。

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

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

    比较说明:对于等于或小于-0.05 的数字,舍入abs(number)(即&gt;= 0.05)将是非零的,所以只有这样您才希望出现符号。

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

    Live example

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-27
      • 1970-01-01
      • 1970-01-01
      • 2019-01-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多