数学.四舍五入:对奇数返回四舍五入,对偶数返回四舍五入

本文关键字:四舍五入 返回 数学 | 更新日期: 2023-09-27 18:18:41

我试图找到一个浮点使用数学轮我发现了以下

0.5 --> 0
1.5 --> 2
2.5 --> 2
3.5 --> 4

等等。我相信这是由于浮点误差,但不太确定如何。怎样才能使偶数四舍五入呢?

数学.四舍五入:对奇数返回四舍五入,对偶数返回四舍五入

From documentation;

最接近a的整数。如果a的小数部分是二分之一在两个整数之间,其中一个是偶数,另一个是奇数,那么返回偶数。注意,这个方法返回Double类型而不是整型

Math.Round方法有一些重载,它将MidpointRounding作为一个参数,如果它位于两个数字之间,则可以指定舍入值。

AwayFromZero 

当一个数位于另外两个数的中间时,它将被四舍五入距离0最近的数。

ToEven

当一个数位于另外两个数的中间时,它将被四舍五入最接近偶数

您可以使用这个,以克服您所说的:

Math.Round(value, MidpointRounding.AwayFromZero);

使用上面的:

当一个数位于另外两个数的中间时,它将被四舍五入距离0最近的数。

有关MidpointRounding枚举的更多文档,请查看此处

您可以这样尝试

 Math.Round(value, MidpointRounding.AwayFromZero);
从MSDN

如果a的小数部分在两个整数的中间,1其中一个为偶数,另一个为奇数,则返回偶数。

还要提到一个重要的一点,我认为值得一提的是,微软遵循了IEEE 754标准。这在MSDN for Math中也有提到。在注释下面加上:

舍入到最接近的值,与偶数相关联 -舍入到最接近的值;如果数字落在中间,则用an四舍五入到最接近的值偶数(零)最低有效位,出现的概率为50%;这是二进制浮点数的默认值还是推荐的默认值为小数。

舍入到最接近的值,与0保持距离 -舍入到最接近的值;如果数字落在中间,则四舍五入到最接近的值上面(用于正数)或下面(用于负数);这是用作小数浮点数的选项。

这就是所谓的银行家舍入(四舍五入)。你可以在这里读到更多。