为什么.NET Core Convert.ToInt32会四舍五入奇数

时间:2019-01-29 15:12:18

标签: c# .net .net-core floating-point floating-accuracy

我刚刚阅读了一些.NET Core代码,并试图了解 System.Convert.ToInt32(float n)的作用。

让我有点恼火的是,如果数字为奇数且> = 0.5,则四舍五入的决定。

if (value < 2147483647.5)
{
   int result = (int)value;
   double dif = value - result;
   if (dif > 0.5 || dif == 0.5 && (result & 1) != 0) result++;
      return result;
}

进行奇数检查的原因是什么? 一个合理构建的方案,但在整个应用程序中使用1.5可能等于2.5。

// True
Convert.ToInt32(1.5) == Convert.ToInt32(2.5)

1 个答案:

答案 0 :(得分:3)

它被称为半圆到偶数,并且是一种以公平的方式四舍五入数字的方式。也称为收敛四舍五入,统计学家四舍五入,荷兰语四舍五入,高斯四舍五入,奇偶四舍五入或银行家四舍五入。

  

四舍五入为偶数:没有正/负偏见且没有朝着/远离零的偏见的平局决胜规则将变为一半。此功能可将四舍五入后的数字相加,即使输入大部分为正数或大部分为负数,也可将预期误差降至最低。这是IEEE 754浮点运算中使用的默认舍入模式。

请参阅: