首页 > 解决方案 > C ++将浮点值舍入到小数位数

问题描述

我试过 std::round 但它没有给我我想要的结果。所以我的问题是我有 C# 程序,我正在转换为 C++,我遇到了这个问题。C# Math.round 和 C++ round 是不同的。所以这会导致错误的计算。C#代码:

Console.WriteLine(Math.Round(0.850, 1));

输出:

0,8

C++ 代码:

 std::cout << roundf(0.850f) << std::endl;

输出:

1

所以就像你看到的那样,它们是不同的。我该如何解决这个问题?

标签: c++roundingdigits

解决方案


C# 版本将 a 舍入double到小数点后一位,C++ 版本将 a 舍入float到最接近的整数。

将二进制浮点数四舍五入到固定的小数位数并没有多大意义,因为四舍五入的数字仍然很可能是一个近似值。例如0.8不能用二进制浮点数精确表示。

C++ 舍入函数仅舍入到最接近的整数值,鉴于上述情况,这是一个明智的选择。

您可以恢复 C# 行为(四舍五入到小数点后一位)std::round(0.850 * 10) / 10

请注意,我已删除f后缀以匹配 C#double类型。


推荐阅读