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

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

本文关键字:小数 舍入 指针 C++      更新时间:2023-10-16

我尝试过std::round,但它并没有给我想要的结果。所以我的问题是,我有C#程序,我正在转换到C++,我面临着这个问题。C#数学.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#行为(四舍五入到小数点后1位(。

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