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

Nat*_*son 3 c++ floating-point string-formatting

考虑:

#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
}
Run Code Online (Sandbox Code Playgroud)

演示

我知道浮点数学并不完全精确,但0.125实际上不是准确表示的值之一吗?为什么格式化时是"0.12"向下舍入而不是向上舍入?"0.13"

Mar*_*som 8

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

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