c#Math.Round()函数不一致

问题描述 投票:1回答:2

Console.WriteLine(Math.Round(98.5));Console.WriteLine(Math.Round(97.5));

给出98的相同结果为什么?

c# rounding
2个回答
1
投票

根据MSDN documents,Math.Round的行为描述为

如果a的小数部分位于两个整数的中间,则一个其中偶数和另一个奇数,则返回偶数

在这种情况下,98.5在98和99之间。在这种情况下,首选事件号。

类似地,97.5在97和98之间。在这种情况下,偶数是98,这就是在两种情况下结果都是98的原因。

如果您要运行以下代码,则可以进一步说明。

Console.WriteLine(Math.Round(99.5));
Console.WriteLine(Math.Round(98.5));

上面的结果将是

100 // 99.5 is mid way between 99 & 100
98  // 98.5 is mid way between 98 & 99

您可以通过指定MidPointRounding使用Math.Round的重载来改变行为

Console.WriteLine(Math.Round(98.5,MidpointRounding.AwayFromZero));
Console.WriteLine(Math.Round(97.5,MidpointRounding.AwayFromZero));

输出

99
98

0
投票

根据文档,如果您未指定MidpointRounding约定,则使用最接近的偶数:

Round(Double)

将双精度浮点值四舍五入为最接近的整数值,并将中点值四舍五入为最接近的偶数

© www.soinside.com 2019 - 2024. All rights reserved.