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();
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();
都是MidpointRounding.ToEven 下的结果,而我现在用的是MidpointRounding.AwayFromZero成员名称 说明
ToEven 当一个数字是其他两个数字的中间值时,会将其舍入为最接近的偶数。
AwayFromZero 当一个数字是其他两个数字的中间值时,会将其舍入为两个值中绝对值较小的值。
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 五后非零就进一
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));
http://msdn.microsoft.com/zh-cn/library/system.double.aspx请记住,浮点数只能近似于十进制数字,浮点数的精度决定了浮点数近似于十进制数字的精确程度。默认情况下,Double 值的精度是 15 个十进制位,但内部维护的最大精度是 17 位。浮点数的精度有几种结果:特定精度下看似相等的两个浮点数可能并不相等,因为它们的最小有效位数不同。由于浮点数可能无法精确近似于十进制数,如果使用十进制数,则使用浮点数的数学或比较运算可能不会产生相同的结果。如果涉及浮点数,值可能不往返。值的往返是指,某个运算将原始浮点数转换为另一种格式,而反向运算又将转换后的格式转换回浮点数,且最终浮点数与原始浮点数相等。由于一个或多个最低有效位在转换中丢失或更改,往返可能会失败。此外,由于 Double 类型的精度损失,使用 Double 值进行的算数运算和赋值运算的结果在不同平台上可能稍有不同。