Console.WriteLine("0.145>"+Math.Round(0.145, 2,MidpointRounding.AwayFromZero).ToString());
            Console.WriteLine("就0.145变态!! 还是我Round函数没理解?MidpointRounding.AwayFromZero不是正常习惯的四舍五入吗?");
            Console.WriteLine("1.145>"+Math.Round(1.145, 2, MidpointRounding.AwayFromZero).ToString());
            Console.WriteLine("0.135>"+Math.Round(0.135, 2, MidpointRounding.AwayFromZero).ToString());
            Console.WriteLine("0.155>"+Math.Round(0.155, 2, MidpointRounding.AwayFromZero).ToString());
            Console.WriteLine("2.145>"+Math.Round(2.145, 2, MidpointRounding.AwayFromZero).ToString());            Console.Read();

解决方案 »

  1.   

    唔 你们说的我都明白
    都是MidpointRounding.ToEven 下的结果,而我现在用的是MidpointRounding.AwayFromZero成员名称 说明 
     ToEven 当一个数字是其他两个数字的中间值时,会将其舍入为最接近的偶数。 
     AwayFromZero 当一个数字是其他两个数字的中间值时,会将其舍入为两个值中绝对值较小的值。 
      

  2.   

    学习了
    eg:
    Console.WriteLine(Math.Round(0.25,1));//0.2  五后皆零看奇偶,五前为偶应舍 去
    Console.WriteLine(Math.Round(0.35, 1));//0.4  五后皆零看奇偶,五前为奇要进一
    Console.WriteLine(Math.Round(0.251, 1));//0.3 五后非零就进一
      

  3.   

    LZ 的问题是由于浮点数(double)不能精确地在计算机内表示造成的。MidpointRounding.AwayFromZero 是往绝对值大的方向取整,只有 1.145 -> 1.15 是正确的。LZ 试着在每个数值后加个 M 试试。    Console.WriteLine("0.145 -> " + Math.Round(0.145m, 2, MidpointRounding.AwayFromZero));
        Console.WriteLine("1.145 -> " + Math.Round(1.145m, 2, MidpointRounding.AwayFromZero));
        Console.WriteLine("0.135 -> " + Math.Round(0.135m, 2, MidpointRounding.AwayFromZero));
        Console.WriteLine("0.155 -> " + Math.Round(0.155m, 2, MidpointRounding.AwayFromZero));
        Console.WriteLine("2.145 -> " + Math.Round(2.145m, 2, MidpointRounding.AwayFromZero));
      

  4.   


    http://msdn.microsoft.com/zh-cn/library/system.double.aspx请记住,浮点数只能近似于十进制数字,浮点数的精度决定了浮点数近似于十进制数字的精确程度。默认情况下,Double 值的精度是 15 个十进制位,但内部维护的最大精度是 17 位。浮点数的精度有几种结果:特定精度下看似相等的两个浮点数可能并不相等,因为它们的最小有效位数不同。由于浮点数可能无法精确近似于十进制数,如果使用十进制数,则使用浮点数的数学或比较运算可能不会产生相同的结果。如果涉及浮点数,值可能不往返。值的往返是指,某个运算将原始浮点数转换为另一种格式,而反向运算又将转换后的格式转换回浮点数,且最终浮点数与原始浮点数相等。由于一个或多个最低有效位在转换中丢失或更改,往返可能会失败。此外,由于 Double 类型的精度损失,使用 Double 值进行的算数运算和赋值运算的结果在不同平台上可能稍有不同。
      

  5.   

    0.145 这个十进制浮点数在计算机内部是以二进制方式进行存储的(可以参看IEEE浮点数标准),由于十进制小数和二进制小数并不能精确转换,所以可能会损失精度,比如说 0.145 在计算机内部可能是存储为 0.14499999... 之类的数,造成了 Math.Round() 返回 0.14。如果要精确的结果,建议使用 System.Decimal 结构。