C++ 将浮点值舍入为小数位数

C++ Rounding float-pointing value to number of fractional digits

我已经试过 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# 版本将 double 舍入到一位小数,C++ 版本将 float 舍入到最接近的整数。

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

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

您可以使用 std::round(0.850 * 10) / 10.

恢复 C# 行为(四舍五入到小数点后一位)

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