说:

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


问题:如果我用-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

最佳答案

默认的MidPointRounding模式是ToEven。在此模式下,如documentation所述(其中a是输入值),


  最接近a的整数。如果a的小数部分是一半
  在两个整数之间,其中一个为偶数,另一个为奇数,则
  偶数返回。


-77777777.5具有两个最接近的整数-77777777-77777778,但后者是偶数,因此是返回的整数。

AwayFromZero模式下,-77777778显然比-77777777更远离零。

08-27 09:54