微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么只有固定工作才需要同时使用固定和显示点操纵器来显示小数点和尾随零?

如何解决为什么只有固定工作才需要同时使用固定和显示点操纵器来显示小数点和尾随零?

我了解fixedshowpoint操纵器的作用,但是为什么要同时使用它们呢?这就是DS Malik的C ++编程教科书所说的:

当然,以下语句将浮点数的输出设置为 固定的十进制格式,在标准输出上带有小数点和尾随零 设备:
cout << fixed << showpoint;

但是不是fixed单独将输出设置为“带小数点和尾随零的固定十进制格式”吗?

我尝试运行自己的实验:

#include <iostream>
#include <iomanip>
using namespace std;
int main() {
    cout << setprecision(3);
    cout << "only fixed" << "\t" << "fixed + showpoint" << endl;
    for (double i = 0.000001; i <= 100000; i *= 10) {
        cout << fixed     << i << "\t\t";
        cout << showpoint << i << endl;
        cout.unsetf(ios::fixed);     
        cout.unsetf(ios::showpoint);
    }
}

但是我看不到仅使用fixed以及同时使用fixedshowpoint的顺序之间的区别:

only fixed      fixed + showpoint
0.000           0.000
0.000           0.000
0.000           0.000
0.001           0.001
0.010           0.010
0.100           0.100
1.000           1.000
10.000          10.000
100.000         100.000
1000.000                1000.000
10000.000               10000.000
100000.000              100000.000

任何见识将不胜感激!

解决方法

使用fixed,您可以设置在所有情况下都希望看到的小数位数。因此,您将始终看到小数点。除非...

,否则与showpoint组合不会有任何区别。

除非...是setprecision(0),否则您将永远看不到小数,因此也看不到小数点。在这种情况下,showpoint的作用是显示尾随的十进制分隔符,后面没有任何内容:

               0                  0.
               1                  1.
              10                 10.
             100                100.

现在,此组合有用吗?我怀疑这是否有意义。因此,没有,没有理由将两者结合起来。

,

在您的情况下,showpoint标志无效。由于所有打印输出的小数点后都有3位数字,并显示了小数点。但是在某些情况下,这两个标志会给出不同的结果。例如,如果您在代码中设置precision(0)。固定时小数点不会显示。

    cout << setprecision(0);

打印出:

      only fixed   fixed + showpoint
               0                  0.
               0                  0.
               0                  0.
               0                  0.
               0                  0.
               0                  0.
               1                  1.
              10                 10.
             100                100.
            1000               1000.
           10000              10000.
          100000             100000.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。