You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++使用round()函数后输出结果出现科学计数法问题

问题原因与修复方案

异常产生原因

  1. float类型精度不足
    单精度浮点数float仅能保证前6~7位十进制有效数字的存储精度,代码中使用的数值8878323是7位有效数字,刚好达到float的精度临界值,存储时会出现精度丢失,导致后续除法运算结果产生误差。
  2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 12:21:01