C++使用round()函数后输出结果出现科学计数法问题
问题原因与修复方案
异常产生原因
float类型精度不足
单精度浮点数float仅能保证前6~7位十进制有效数字的存储精度,代码中使用的数值8878323是7位有效数字,刚好达到float的精度临界值,存储时会出现精度丢失,导致后续除法运算结果产生误差。cout默认输出规则限制
当浮点数的整数部分超过6位时,cout默认会自动切换为科学计数法输出,你看到的1.77566e+06不是计算结果不是整数,只是默认显示格式的问题。
修复方案
- 将所有
float类型替换为double类型:双精度浮点数double可保证15~17位十进制有效数字的精度,完全覆盖代码中的数值范围,避免存储精度丢失问题。 - 调整
cout输出格式:引入<iomanip>头文件,通过fixed和setprecision(0)强制用定点格式输出整数,关闭科学计数法显示。
修改后可正常运行的代码如下:
#include <iostream> #include <cmath> #include <iomanip> using namespace std; int main() { double a[30] = {41, 2733017,17473, 3164246, 105, 8015, 150, 12, 1090473, 81, 135, 15539, 8251, 7029, 9589930, 6027963, 5959834, 12661, -884988, 7258221, 8878323, 92, 1200422, 16645, -3062617, 147, 5421, 22, 9495996, 2302743}; double b[30] = {2, 367, 506, 763, 14, 972, 12, 8, 889, 6, 10, 1840, 1294, 1834, 3822029, -1641686, 126, 1826, -2463550, 509, 5, 8, 717, 1270, 3789065, 14, 806, 4, 307, 803}; double ans[30]; for(int i=0; i<30; i++) { ans[i] = a[i]/b[i]; ans[i] = round(ans[i]); } cout << fixed << setprecision(0); for(int i=0; i<30; i++) cout << ans[i] << " "; return 0; }
内容的提问来源于stack exchange,提问作者NerdNet
相关产品推荐
相关产品推荐

