为什么需要同时使用 fixed 和 showpoint 操纵器来显示小数点和尾随零,而只有 fixed 才能完成这项工作?
Why do you need to use both fixed and showpoint manipulators to show decimal point and trailing zeros when only fixed does the job?
我了解 fixed
和 showpoint
操纵器各自的作用,但您为什么要同时使用它们? DS Malik 的 C++ 编程教科书是这样说的:
Of course, the following statement sets the output of a floating-point number in a
fixed decimal format with the decimal point and trailing zeros on the standard output
device:
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
和同时使用 fixed
和 showpoint
之间的区别,按顺序:
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
you set a number of decimals that you want to see in all cases. So you will always see the decimal point. Combining with showpoint
没有区别,除非...
除非...您 setprecision(0)
,在这种情况下您将永远看不到小数,因此没有小数点。在这种情况下,showpoint
将具有显示尾随小数点分隔符且后面没有任何内容的效果:
0 0.
1 1.
10 10.
100 100.
现在,这个组合有用吗?我怀疑这是有道理的。所以,不,没有理由将这两者结合起来。
在您的情况下,showpoint 标志没有任何作用。由于所有打印输出的小数点后都有 3 位数字,并且显示了小数点。但在某些情况下,这两个标志会给出不同的结果。例如,如果您在代码中设置精度(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.
我了解 fixed
和 showpoint
操纵器各自的作用,但您为什么要同时使用它们? DS Malik 的 C++ 编程教科书是这样说的:
Of course, the following statement sets the output of a floating-point number in a fixed decimal format with the decimal point and trailing zeros on the standard output device:
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
和同时使用 fixed
和 showpoint
之间的区别,按顺序:
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
you set a number of decimals that you want to see in all cases. So you will always see the decimal point. Combining with showpoint
没有区别,除非...
除非...您 setprecision(0)
,在这种情况下您将永远看不到小数,因此没有小数点。在这种情况下,showpoint
将具有显示尾随小数点分隔符且后面没有任何内容的效果:
0 0.
1 1.
10 10.
100 100.
现在,这个组合有用吗?我怀疑这是有道理的。所以,不,没有理由将这两者结合起来。
在您的情况下,showpoint 标志没有任何作用。由于所有打印输出的小数点后都有 3 位数字,并且显示了小数点。但在某些情况下,这两个标志会给出不同的结果。例如,如果您在代码中设置精度(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.