所以我得到了我最后一个问题的答案(我不知道为什么我没有想到这个)。 我正在使用cout
打印一个double
,在我意想不到的情况下,它变得四舍五入。 如何使cout
使用全精度打印double
?
您可以直接在std::cout
上设置精度,并使用std::fixed
格式说明符。
double d = 3.14159265358979;
cout.precision(17);
cout << "Pi: " << fixed << d << endl;
您可以#include
获得浮点或双精度的最大精度。
#include <limits>
typedef std::numeric_limits< double > dbl;
double d = 3.14159265358979;
cout.precision(dbl::max_digits10);
cout << "Pi: " << d << endl;
使用std::setprecision
:
std::cout << std::setprecision (15) << 3.14159265358979 << std::endl;
下面是我要使用的:
std::cout << std::setprecision (std::numeric_limits<double>::digits10 + 1)
<< 3.14159265358979
<< std::endl;
基本上,limits包具有所有内置类型的特征。
浮点数(float/double/long double)的特征之一是digits10属性。 这定义了一个以10为基数的浮点数的精确度(我忘了确切的术语)。
有关其他属性的详细信息,请参阅:http://www.cplusplus.com/reference/std/limits/numeric_limits.html
。