为什么打印double类型vector元素时会出现取整或格式异常?
问题:打印double类型vector时输出格式异常
尝试打印double类型的vector,但输出要么是科学计数法格式,要么数值被取整,怀疑是打印语句存在问题。
代码示例
vector <double> abcd = { 123456789,554.55,13451.79 }; //print cout << right << setw(75) << "Total Purchase:" << abcd [0] << endl; cout << right << setw(75) << "" << abcd [1] << "$" << endl; cout << right << setw(75) << "" << abcd [2] << "€" << endl;
实际输出
1.23457e+08 554.55 13451.8
解决方法
问题和vector本身无关,是cout默认的double输出规则导致的:
- 默认会对较大/较小的数值启用科学计数法
- 默认只保留6位有效数字,所以会出现数值被取整的情况
只需要通过<iomanip>头文件中的格式化操控符调整输出规则即可:
- 包含必要的头文件:
#include <iomanip> - 添加格式化设置:
fixed:强制使用定点小数格式,禁用科学计数法setprecision(n):设置保留的小数位数(n根据需求自行调整)
修改后的代码
#include <iostream> #include <vector> #include <iomanip> using namespace std; int main() { vector<double> abcd = {123456789, 554.55, 13451.79}; // 设置输出格式:定点小数,保留2位小数 cout << fixed << setprecision(2); cout << right << setw(75) << "Total Purchase:" << abcd[0] << endl; cout << right << setw(75) << "" << abcd[1] << "$" << endl; cout << right << setw(75) << "" << abcd[2] << "€" << endl; return 0; }
修改后的输出
Total Purchase:123456789.00 554.55$ 13451.79€
如果需要调整小数位数,修改setprecision的参数即可。比如想让整数部分完整显示且不带小数,可以设置setprecision(0),但此时554.55会被四舍五入为555,按需选择即可。
内容的提问来源于stack exchange,提问作者mzz
相关产品推荐
相关产品推荐

