C++中如何用cout控制输出相对误差并保留小数末尾的零?
C++ 使用cout打印double类型的格式控制方案
前置准备
首先需要引入格式控制相关的头文件:
#include <iomanip>
满足误差不超过10^(-6)的实现
cout默认的输出精度为6位有效数字,要满足绝对或相对误差≤1e-6的要求,可选两种实现模式:
- 固定小数位模式(fixed):
搭配setprecision(6)使用,此时setprecision的参数表示小数点后保留的位数,舍入误差最大为5e-7,完全符合误差要求。该模式会强制输出小数点和末尾的0,刚好满足你需要打印1000.00类格式的需求。
注意该模式设置一次后全局生效,后续所有cout输出都会沿用该格式。 - 默认有效数字模式:
搭配setprecision(7)使用,此时setprecision的参数表示保留的有效数字总位数,相对误差最大为5e-7,符合误差要求。但该模式下整数不会输出小数点和末尾的0,无法满足你打印末尾.00的需求。
完整代码示例
#include <iostream> #include <iomanip> using namespace std; int main() { // 仅需设置一次,后续所有cout输出都生效 cout << fixed << setprecision(6); double test_var; // 测试整数场景 test_var = 1000.0; cout << test_var << endl; // 输出1000.000000,末尾小数位不会省略 // 测试小数场景 test_var = 0.000001234; cout << test_var << endl; // 输出0.000001,误差2.34e-7 < 1e-6,符合要求 // 测试常规数值场景 test_var = 1234.5678901; cout << test_var << endl; // 输出1234.567890,误差1e-7 < 1e-6,符合要求 // 如果你仅需要保留2位小数(注意此时误差最大为0.005,无法满足1e-6要求) // cout << fixed << setprecision(2); // cout << 1000.0 << endl; // 输出1000.00 return 0; }
内容的提问来源于stack exchange,提问作者Sholy
相关产品推荐
相关产品推荐

