gpt4 book ai didi

c++ - C++ 中以 5 结尾的 float 的不同舍入结果

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:06:30 27 4
gpt4 key购买 nike

今天早上我正在寻找一种在 C++ 中舍入 float 的方法,我找到了 this answer解决我的问题。

但是,我注意到一些不寻常的事情。当我尝试将某些 float 四舍五入到小数点后两位时,1.075 和 1.895 等数字似乎遵循不同的四舍五入规则。具体来说,用下面的简单代码:

#include <iostream>
#include <iomanip>

int main(int argc, char** argv)
{
float testme[] = { 1.07500, 1.89500, 2.70500, 3.47500};
std::cout << std::setprecision(2) << std::fixed;

for(int i = 0; i < 4; ++i)
{
std::cout << testme[i] << std::endl;
}

return 0;
}

我得到的结果是

1.08
1.89
2.70
3.47

因此 1.075 变为 1.08,而 1.895 变为 1.89。这真的让我很困惑。我会很感激一些解释。谢谢!

最佳答案

我认为这是 float 无法精确表示数字 1.895 的问题。计算机可以存储的最接近1.895的浮点值实际上是

1.894999980926513671875

如果四舍五入到小数点后两位,实际上应该 1.89,因为在查看下一个数字后您会向下舍入。

我设法使用 this tool 得到了上面的数字,这对于解释其他值也可能派上用场。

关于c++ - C++ 中以 5 结尾的 float 的不同舍入结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49225204/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com