为什么 0.125,格式为 2 位小数精度,显示“0.12”而不是“0.13”?

Why does 0.125, formatted with 2 digits of decimal precision, show "0.12" not "0.13"?

考虑:

#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"

是的,0.125 是应该具有精确二进制表示的罕见浮点值之一。

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