我已经尝试过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
类型。