我刚刚阅读了一些.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)
答案 0 :(得分:3)
它被称为半圆到偶数,并且是一种以公平的方式四舍五入数字的方式。也称为收敛四舍五入,统计学家四舍五入,荷兰语四舍五入,高斯四舍五入,奇偶四舍五入或银行家四舍五入。
四舍五入为偶数:没有正/负偏见且没有朝着/远离零的偏见的平局决胜规则将变为一半。此功能可将四舍五入后的数字相加,即使输入大部分为正数或大部分为负数,也可将预期误差降至最低。这是IEEE 754浮点运算中使用的默认舍入模式。
请参阅: