Den*_*nis -2 .net c# vb.net math
我必须错过.NET舍入的一些微妙之处.所以我看这个例子:
decimal num = 2.5M;
var result = Math.Round(num);
Run Code Online (Sandbox Code Playgroud)
为什么result = 2?(我本来应该预期3,因为它应该围绕)
请参阅MSDN:
十进制Math.Round(Decimald)
将十进制值舍入为最接近的整数,并将中点值舍入为最接近的偶数(示例).
"中点"在这里意味着.5; 在你的情况下偶数是2.如果你这样四舍五入3.5,那就会导致4.
如果你想用"去零",而不是四舍五入,你可以使用的System.MidpointRounding.AwayFromZero枚举:
decimal d = 2.5M;
decimal roundedD = Math.Round(d, MidpointRounding.AwayFromZero); // results in 3
Run Code Online (Sandbox Code Playgroud)
关于为什么它默认使用中点舍入(AKA"银行家舍入")而不是"远离零"舍入,请参阅此答案.据说它是一种更好的算法(即在许多迭代中更有效).
小智 5
如果要使用经典舍入
decimal num = 2.5M;
var result = Math.Round(num,0, MidpointRounding.AwayFromZero);
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请参阅https://msdn.microsoft.com/zh-cn/library/system.math.round(v=vs.110).aspx
| 归档时间: |
|
| 查看次数: |
474 次 |
| 最近记录: |