您可以在更改之前获得精度std::ios_base::precision
,然后使用它稍后将其更改回来。
您可以通过以下方式看到这一点:
#include <ios>
#include <iostream>
#include <iomanip>
int main (void) {
double d = 3.141592653589;
std::streamsize ss = std::cout.precision();
std::cout << "Initial precision = " << ss << '\n';
std::cout << "Value = " << d << '\n';
std::cout.precision (10);
std::cout << "Longer value = " << d << '\n';
std::cout.precision (ss);
std::cout << "Original value = " << d << '\n';
std::cout << "Longer and original value = "
<< std::setprecision(10) << d << ' '
<< std::setprecision(ss) << d << '\n';
std::cout << "Original value = " << d << '\n';
return 0;
}
输出:
Initial precision = 6
Value = 3.14159
Longer value = 3.141592654
Original value = 3.14159
Longer and original value = 3.141592654 3.14159
Original value = 3.14159
上面的代码显示了两种设置精度的方法,第一种是调用std::cout.precision (N)
,第二种是使用流操纵器std::setprecision(N)
。
但是您需要记住,精度是用于通过流输出值,它不会直接影响值本身与代码的比较,例如:
if (val1== val2) ...
换句话说,即使输出可能是3.14159
,值本身仍然是完整的3.141592653590
(当然要受到正常的浮点限制)。
如果你想这样做,你需要检查它是否足够接近而不是相等,代码如下:
if ((fabs (val1 - val2) < 0.0001) ...