C ++将浮点数四舍五入为小数位数

问题描述 投票:-2回答:1

我已经尝试过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++ rounding digits
1个回答
1
投票

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

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.