如何在 std::cout 中仍然不输出零的同时获得非科学输出?

How to get non scientific output while still not outputing zeros in std::cout?

提问人:Givikap120 提问时间:6/19/2022 更新时间:6/19/2022 访问量:61

问:

下面是一个示例:

std::cout << 1000000.0 << "\n";
std::cout << std::fixed << 1000000.0 << "\n";
std::cout << std::fixed << std::noshowpoint << 1000000.0 << "\n";

它会打印给我这个:

1e+06
1000000.000000
1000000.000000

但我想要这个:

1000000

如何在没有 IO 机械手的情况下做到这一点? 为什么没有? 因为我想打印:setprecision()

std::cout << 1000000.0 << " " << 1111111.1 << " " << 1234567.89;

并获得:

1000000 1111111.1 1234567.89

无需计算每个数字的精度

C++ IOSTREAM cout IOManip

评论

0赞 Ankit Kumar Maurya 6/19/2022
您可以使用 printf 函数。只需要使用适当的格式说明符。
0赞 Alex Sveshnikov 6/19/2022
示例中的最后两个数字不能完全用二进制表示,那么如果您不手动指定精度,程序如何知道要打印出多少个十进制数字?
0赞 Ted Lyngmo 6/19/2022
std::cout << static_cast<long>(1000000.0) << '\n';
0赞 Givikap120 6/19/2022
@AlexSveshnikov那么,如果我这样做,怎么知道要打印什么呢?愚蠢的评论IMO。coutcout<<12.34
1赞 Alex Sveshnikov 6/19/2022
该解决方案与您对我的问题的回答相矛盾,在 .你回答了,但现在它会打印.setprecision(16)12.3400112.3412.34001

答:

1赞 Givikap120 6/19/2022 #1

当数字的位数高于精度时,使用科学输出。 例如,默认精度等于 6,但数字 1234567 有 7 位数字,因此将打印为 ,切断最后一位数字。 因此,要正常打印1234567,我们至少需要精度 = 7。 未添加“错误”数字的最高精度为 15,因此您需要使用 。1.23457+e06std::setprecision(15)

法典:std::cout << std::setprecision(15) << 1000000.0 << " " << 1111111.1 << " " << 1234567.89;

外:1000000 1111111.1 1234567.89

评论

1赞 prapin 6/19/2022
我建议使用 15 位数字,因为小数点后第 16 位并不总是精确的。std::setprecision(15)
0赞 Givikap120 6/19/2022
好的,我测试了几个数字,所有数字都有 16 个,谢谢你的信息