c++ - 为什么使用 2 位小数精度格式化的 0.125 显示 "0.12"而不是 "0.13"?

标签 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
}

Demo

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

最佳答案

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

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

关于c++ - 为什么使用 2 位小数精度格式化的 0.125 显示 "0.12"而不是 "0.13"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72493660/

相关文章:

c++ - Visual Studio 2010 文本编辑器错误插入符号

c++ - 它是干净的代码吗?

Javascript - 价格和 float

c++ - OpenCv 图像未显示

c++ - 如何使用 boost 异常将信息添加到 std::exception

c - 使用单精度浮点系统进行 double 浮点加/减/乘/除运算的简单 C 示例

c# - 播放文件中的nAudio奇数缓冲区值

delphi - 格式和指针/十六进制值(内存覆盖)

Python - 使用变量作为字符串格式化的一部分

c++ - 在循环中格式化数字