您可以直接设置精度std::cout
并使用std::fixed
格式说明符。
double d = 3.14159265358979;
cout.precision(17);
cout << "Pi: " << fixed << d << endl;
您#include <limits>
可以获得浮点数或双精度数的最大精度。
#include <limits>
typedef std::numeric_limits< double > dbl;
double d = 3.14159265358979;
cout.precision(dbl::max_digits10);
cout << "Pi: " << d << endl;
为什么您明确建议使用
fixed
?用double h = 6.62606957e-34;
,fixed
给我0.000000000000000
和scientific
输出6.626069570000000e-34
。精度需要为17(或std :: numeric_limits <double> :: digits10 + 2),因为从十进制转换回二进制表示形式时需要2个额外的数字以确保将值四舍五入为相同的原始值。这是一篇包含一些详细信息的论文:docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html
真的是正确的答案吗?当我手动使用一个大数字时,我可以打印出多达51位近似的e,但是
cout.precision(numeric_limits<double>::digits10 + 2);
只有16位。对于那些希望在@MikeFisher论文中提到17位数字的人,它在定理15下。
@MikeFisher是的,C ++ 11引入
max_digits10
来表示相同的含义。修正了答案以反映这一点。