Math.Round加倍.5

Hus*_*nan 2 c# double rounding

让我们说:

Math.Round(2.5) //2.0
Math.Round(-2.5) //-2.0
Math.Round(2.5,MidpointRounding.ToEven) // 2.0
Math.Round(2.5,MidpointRounding.AwayFromZero) //3.0
Run Code Online (Sandbox Code Playgroud)

问题:如果我用-77777777.5更改数字,为什么结果是-77777778.0而不是-77777777.0

Math.Round(-77777777.5) // -77777778.0
Math.Round(-77777777.5,MidpointRounding.AwayFromZero) // -77777778.0
Math.Round(-77777777.5,MidpointRounding.ToEven) // -77777778.0
Run Code Online (Sandbox Code Playgroud)

Dan*_*haw 7

默认MidPointRounding模式是ToEven.在此模式下,如文档所述(a输入值在哪里),

最接近a的整数.如果a的小数分量在两个整数之间,其中一个是偶数而另一个是奇数,则返回偶数.

-77777777.5有两个最接近的整数-77777777,-77777778但后者是偶数,所以这是返回的整数.

AwayFromZero模式中,-77777778显然比零更远-77777777.