Math.Round返回一个向上舍入的奇数值,但向下舍入为偶数

时间:2014-08-18 12:18:56

标签: c# math rounding

我正在尝试使用数学圆找到一个浮点数 我找到了以下

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

等等。 我相信这是由于浮点错误,但不太确定如何。 我怎样才能解决这个问题呢?

4 个答案:

答案 0 :(得分:8)

来自documentation;

  

最接近a的整数。 如果a的分数成分是中途   在两个整数之间,其中一个是偶数,另一个是奇数,然后是   返回偶数。请注意,此方法返回Double   而不是整数类型。

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

AwayFromZero 
  

如果一个数字介于另外两个数字之间,那么它将向四舍五入   最接近的数字。

ToEven
  

如果一个数字介于另外两个数字之间,那么它将向四舍五入   最近的偶数。

答案 1 :(得分:6)

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

Math.Round(value, MidpointRounding.AwayFromZero);

使用上述内容:

  

如果一个数字介于另外两个数字之间,那么它将向四舍五入   最接近的数字。

有关MidpointRounding枚举的进一步文档,请查看here

答案 2 :(得分:2)

您可以尝试这样

 Math.Round(value, MidpointRounding.AwayFromZero);

来自MSDN

  

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

另外要提一点我认为值得一提的是微软已经跟随 IEEE 754 standard 。在备注下的MSDN for Math.Round中也提到了这一点:

  

舍入到最近,连接到偶数 - 舍入到最接近的值;如果数字中间下降,则用a舍入到最接近的值   偶数(零)最低有效位,50%的时间发生;这个   是二进制浮点的默认值和建议的默认值   为十进制。

     

舍入到最近,与零相关 - 舍入到最接近的值;如果数字中途下降,则四舍五入到最接近的值   以上(正数)或以下(负数);这是   打算作为十进制浮点的选项。

答案 3 :(得分:0)

这被称为银行家四舍五入(圆到均匀)。您可以阅读更多相关信息here。这是一个.NET Framework功能,并按设计工作。