【问题标题】:Why use showpoint when you can use setprecision fixed?当您可以使用 setprecision fixed 时,为什么还要使用 showpoint?
【发布时间】:2015-02-16 23:14:26
【问题描述】:

我不太了解 showpoint 的用途,我知道它强制显示小数点,但是在不使用 showpoint 的情况下,“cout

你能告诉我一个必须有showpoint的例子吗?

【问题讨论】:

  • 如果您想显示至少一位小数但不使用固定精度怎么办?

标签: c++ iostream iomanip


【解决方案1】:

当覆盖大范围的值时,可能需要让格式化逻辑在使用定点和科学记数法之间切换,同时仍需要小数点。如果您查看此示例的输出,您会发现它不仅仅是定点表示法:

#include <iostream>

int main() {
    for (double value(1e15), divisor(1); divisor < 1e20; divisor *= 10) {
        std::cout << std::noshowpoint << (value / divisor) << '\t'
                  << std::showpoint << (value / divisor)
                  << '\n';
    }
}

这会产生输出

1e+15   1.00000e+15
1e+14   1.00000e+14
1e+13   1.00000e+13
1e+12   1.00000e+12
1e+11   1.00000e+11
1e+10   1.00000e+10
1e+09   1.00000e+09
1e+08   1.00000e+08
1e+07   1.00000e+07
1e+06   1.00000e+06
100000  100000.
10000   10000.0
1000    1000.00
100 100.000
10  10.0000
1   1.00000
0.1 0.100000
0.01    0.0100000
0.001   0.00100000
0.0001  0.000100000

【讨论】:

    【解决方案2】:

    如果精度为0且未使用showpoint,则不出现小数点,否则出现:

    #include <iostream>
    #include <iomanip>
    
    int
    main()
    {
        double pi = 2646693125139304345./842468587426513207.;
        std::cout << std::fixed << std::setprecision(0);
        std::cout << pi << '\n';
        std::cout << std::showpoint;
        std::cout << pi << '\n';
    }
    

    应该输出:

    3
    3.
    

    【讨论】:

    • @user97662:就是这样,就是这样。我没有设计它。我只是报告规范所说的内容。
    猜你喜欢
    • 1970-01-01
    • 2022-11-04
    • 1970-01-01
    • 1970-01-01
    • 2020-10-04
    • 1970-01-01
    • 2011-10-01
    • 1970-01-01
    • 2016-01-15
    相关资源
    最近更新 更多