Math.Round()这个函数是按照四舍六入五留双(银行家算法)的原则进行取舍的
但是有几个数字却没有按照银行家算法,不知道为什么??
      Math.Round()       结果
1. Math.Round(1.205, 2)  1.2
2. Math.Round(1.225, 2)  1.23
3. Math.Round(1.265, 2)  1.26
4. Math.Round(1.285, 2)  1.28
5. Math.Round(1.325, 2)  1.32
红色标记的是有问题的,按照5的前面一位是2,是偶数,应该就是舍去5,变成1.22,结果是1.23?
这是为什么?
附件里是DEBUG的截图。

解决方案 »

  1.   

    请参阅览室Math.Round函数的模式参数,
      

  2.   

    math.round 是 五舍六入 不是你想象中的四舍五入
      

  3.   

    不看帮组的家伙转自vs help
    /*
    This code example produces the following results: 3.4 = Math.Round( 3.45, 1)
    -3.4 = Math.Round(-3.45, 1) 3.4 = Math.Round( 3.45, 1, MidpointRounding.ToEven)
     3.5 = Math.Round( 3.45, 1, MidpointRounding.AwayFromZero)-3.4 = Math.Round(-3.45, 1, MidpointRounding.ToEven)
    -3.5 = Math.Round(-3.45, 1, MidpointRounding.AwayFromZero)*/1.   Math.Round(1.205,   2)     1.2 
    2.   Math.Round(1.225,   2)     1.23 
    3.   Math.Round(1.265,   2)     1.26 
    4.   Math.Round(1.285,   2)     1.28 
    5.   Math.Round(1.325,   2)     1.32 
    红色标记的是有问题的,按照5的前面一位是2,是偶数,应该就是舍去5,变成1.22,结果是1.23? 
    这是为什么? 
    附件里是DEBUG的截图。
    答案   Math.Round( num, 2, MidpointRounding.ToEven);
      

  4.   

    a = Format(a + 0.49, "0")这样就可以四舍五入了,不信你试试看
      

  5.   

    Decimal d = new Decimal(1.225); 
    Decimal.Round(d, 2, MidpointRounding.ToEven).ToString(); 
    结果就是1.22
      

  6.   

    ls全都答非所问...引起这个问题的不是Math.Round...而是double的浮点数误差...你试试这个代码...
    Math.Round((decimal)1.225, 2) 1.22
      

  7.   

    TO 牧师de鱼:
      我就是这样写的,我的附件里就是这样的,
    Math.Round(   num,   2,   MidpointRounding.ToEven);
    结果还是1.23
    它默认就是用MidpointRounding.ToEven这种的
      

  8.   

    结贴,散分dyjqk  
    vrhero  
    正解
      

  9.   

    好像要过一天才,那就明天吧
    看来以后要注意了,
    Double类型