代码之家  ›  专栏  ›  技术社区  ›  Nathan Pierson

为什么0.125(格式为2位十进制精度)显示“0.12”而不是“0.13”?

  •  2
  • Nathan Pierson  · 技术社区  · 2 年前

    考虑:

    #include <iostream>
    #include <iomanip>
     
    int main()
    {
        std::cout << std::fixed << std::setprecision(2);
        std::cout << 0.125 << '\n'; // Prints "0.12"
        std::cout << 0.126 << '\n'; // Prints "0.13" as expected
    }
    

    Demo

    我知道浮点数学不是很精确,但不是 0.125 实际准确表示的值之一?为什么它归结为 "0.12" 而不是最多 "0.13" 格式化时?

    1 回复  |  直到 2 年前
        1
  •  8
  •   Mark Ransom    2 年前

    0.125 是应具有精确二进制表示形式的少数浮点值之一。

    您的舍入模式可能设置为 round-half-to-even .