使用多少位数来得出Math.Round答案?

时间:2013-02-05 08:28:03

标签: c# .net

当使用Math.Round时,在执行'round'时只考虑小数位,或者只是小数位右边的数字,我们将四舍五入到?

实施例

decimal myNumber1 = 0.2651m;
decimal myNumber2 = 0.2650m;

Math.Round(myNumber1, 2) gives 0.27
Math.Round(myNumber2, 2) gives 0.26

我希望两者都是0.26,因为四舍五入的第四位不考虑舍入。

3 个答案:

答案 0 :(得分:4)

  

小数点后四位不考虑舍入

事实并非如此。

根据MSDN,Math.Round(decimal)使用舍入类型MidpointRounding.ToEven

中点舍入指定要舍入的值恰好位于两个可能的舍入值之间的舍入行为。

例如,

  • 0.2649将始终围绕0.26
  • 0.2651将始终围绕0.27

舍入到小数点后两位。

有趣的是0.2650的情况:默认情况下,使用MidpointRounding.ToEven

  • 0.26 代表Math.Round(0.2650, 2)
  • {li> 0.28 Math.Round(0.2750, 2)

这是因为舍入是在四舍五入后对最高有效数字进行的(第一种情况为6,第二种情况为8

但是,如果您使用MidpointRounding.AwayFromZero,则会获得:

    {li> 0.27 Math.Round(0.2650, 2, MidpointRounding.AwayFromZero) {li> 0.28 Math.Round(0.2750, 2, MidpointRounding.AwayFromZero)

答案 1 :(得分:0)

如果您不想要第4个十进制数字,那么只需在舍入前使用Math.Truncate

Math.Truncate(0.2651m * 1000) / 1000; //0.265
Math.Truncate(0.2650m * 1000) / 1000; //0.265

答案 2 :(得分:0)

考虑所有小数位。 舍入0.2650000001m也将导致0.27