如何使用 cout 以全精度打印双精度值?

2024-04-28

In my 先前的问题 https://stackoverflow.com/questions/553974/why-does-int55-54-in-c我正在打印一个double using cout当我没有预料到的时候,它就被四舍五入了。我怎样才能使cout打印一个double使用全精度?


在 C++20 中你可以使用std::format https://en.cppreference.com/w/cpp/utility/format去做这个:

std::cout << std::format("{}", std::numbers::pi_v<double>);

输出(假设IEEE 754 https://en.wikipedia.org/wiki/IEEE_754 double):

3.141592653589793

默认浮点格式是具有往返保证的最短十进制表示形式。与上述方法相比,该方法的优点是setprecisionI/O 操纵器的特点是它不会打印不必要的数字并且不受全局状态的影响(参见这篇博文 https://www.zverovich.net/2023/06/04/printing-double.html更多细节)。

在此期间您可以使用{fmt} 库 https://github.com/fmtlib/fmt, std::format是基于。 {fmt} 还提供了print函数使这变得更加简单和高效(godbolt https://godbolt.org/z/ej48Wa):

fmt::print("{}", M_PI);

这个问题实际上并没有定义“完全精度”的含义。通常,它被理解为足以进行十进制往返的精度,但还有另一种可能但不太可能的解释(有效)小数位数的最大数量 https://www.exploringbinary.com/maximum-number-of-decimal-digits-in-binary-floating-point-numbers/。对于 IEEE 754 double 来说,后者是 767 位。

免责声明:我是 {fmt} 和 C++20 的作者std::format.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 cout 以全精度打印双精度值? 的相关文章

随机推荐