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

浮点数输出异常:为何std::fixed输出1000000007而非1000000000?

问题解答

代码示例

#include <iostream>
#include <ios>

int main() {
    auto mod = 1e9+7;
    std::cout << mod << '\n';
    std::cout << std::fixed << mod << '\n';
}

运行输出

1e+009
1000000007.000000

问题解析

  • 为什么默认输出是1e+009?
    C++的std::cout默认会在数字绝对值≥1e6或≤1e-4时自动切换到科学计数法格式,同时默认输出精度为6位有效数字。1000000007保留6位有效数字后就是1.00000e+09,最终显示为1e+009。

  • 为什么std::fixed后输出是1000000007.000000而非1000000000.000000?
    1e9是double类型字面量,1e9+7的结果1000000007属于可以被double精确存储的整数——double拥有53位二进制有效精度,能精确表示所有≤253的整数,而`1000000007`远小于230(约10.7亿),完全在精确存储范围内。变量mod实际存储的就是精确的1000000007.0,用std::fixed格式输出时会显示小数点后6位,自然就是1000000007.000000,不存在精度丢失的情况。

内容的提问来源于stack exchange,提问作者Lunatica

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 08:07:08