在13.694999999998的情况下,Math.Round()如何工作?

azh*_*s.s 0 c#

在下面的代码片段中,我预计两种情况下都会达到13.70,但我先得到13.69,第二得到13.70.

var d1 = Decimal.Round(13.694999999999999999999999998M, 2, MidpointRounding.AwayFromZero)
var d2 = Decimal.Round(13.695000M, 2, MidpointRounding.AwayFromZero);
Run Code Online (Sandbox Code Playgroud)

Ern*_*rno 5

var d1 = Decimal.Round(13.694999999999999999999999998M, 2, MidpointRounding.AwayFromZero);
Run Code Online (Sandbox Code Playgroud)

13.694999999999小于13.695所以它将转为13.69

MidpointRounding.AwayFromZero在这种情况下无效.

var d2 = Decimal.Round(13.695000M, 2, MidpointRounding.AwayFromZero);
Run Code Online (Sandbox Code Playgroud)

13.695 正好在13.69和13.70之间,因此舍入取决于MidpointRounding.AwayFromZero,结果为13.70(远离0)

期望舍入舍入较低有效数字并使用这些值舍入较高有效数字是错误的.例如:

回合13.694999999999至13.695,然后回合13.695至13.70