C#Math.Round问题与x.95

Dav*_*dze 4 c#

刚遇到一个奇怪的问题:

Math.Round(113.065, 2, MidpointRounding.ToEven) => 113.06
Math.Round(113.075, 2, MidpointRounding.ToEven) => 113.08
Math.Round(113.085, 2, MidpointRounding.ToEven) => 113.08
Run Code Online (Sandbox Code Playgroud)

但...

Math.Round(113.095, 2, MidpointRounding.ToEven) => 113.1
Run Code Online (Sandbox Code Playgroud)

为什么会这样?我希望我的结果是113.09!那可能吗?

谢谢

Tho*_*ger 11

Math.Round(113.095, 2, MidpointRounding.ToEven) => 113.1
Run Code Online (Sandbox Code Playgroud)

那是偶数.用两位小数读取它:

113.10

10将是偶数部分.修剪后的右零只是使它看起来很奇怪("不均匀"意义上的"奇怪",不要混淆为"奇怪"意思是"怪异"),但这就是为什么它表现出来的原因.

此外,您的问题中的示例也不准确.以下是这些输出的结果,这将进一步强化x.1您输出的原因:

Math.Round(113.065, 2, MidpointRounding.ToEven) => 113.06
Math.Round(113.075, 2, MidpointRounding.ToEven) => 113.08
Math.Round(113.085, 2, MidpointRounding.ToEven) => 113.08
Run Code Online (Sandbox Code Playgroud)

请注意,舍入113.075 ToEven导致113.0 8,而不是113.0 7.

完整示例:

Math.Round(113.065, 2, MidpointRounding.ToEven) => 113.06
Math.Round(113.075, 2, MidpointRounding.ToEven) => 113.08
Math.Round(113.085, 2, MidpointRounding.ToEven) => 113.08
Math.Round(113.095, 2, MidpointRounding.ToEven) => 113.1
Run Code Online (Sandbox Code Playgroud)

这也可以解读为:

Math.Round(113.065, 2, MidpointRounding.ToEven) => 113.06
Math.Round(113.075, 2, MidpointRounding.ToEven) => 113.08
Math.Round(113.085, 2, MidpointRounding.ToEven) => 113.08
Math.Round(113.095, 2, MidpointRounding.ToEven) => 113.10
Run Code Online (Sandbox Code Playgroud)

如果在你的问题的输出确实是你希望得到什么...(即如果这真的是你想要的输出,你只是想知道什么,你必须做的就是那个输出)

Math.Floor(113.065 * 100) / 100 => 113.06
Math.Floor(113.075 * 100) / 100 => 113.07
Math.Floor(113.085 * 100) / 100 => 113.08
Math.Floor(113.095 * 100) / 100 => 113.09
Run Code Online (Sandbox Code Playgroud)