1 Math.Round(45.367,2) //Returns 45.37
2 Math.Round(45.365,2) //Returns 45.36
C#中的Round()不是我们中国人理解的四舍五入,是符合IEEE标准的四舍五入,具体是四舍六入,下面的才是符合中国人理解的四舍五入
1 Math.Round(45.367,2,MidpointRounding.AwayFromZero); //Returns 45.37
2 Math.Round(45.365,2,MidpointRounding.AwayFromZero); //Returns 45.37
注:传入的参数如果是double类型的,其实得到的结果还是不会四舍五入(double精度不够导致的) 所以上面的更严谨的写法应该是:将传入的参数默认转换为decimal类型,确保其在四舍五入之前精度不会降下来。因为decimal精度高于double
Math.Round(Convert.ToDecimal(45.367),2,MidpointRounding.AwayFromZero);//Returns 45.37
Math.Round(Convert.ToDecimal(45.365),2,MidpointRounding.AwayFromZero);//Returns 45.37
后来有项目需要不四舍五入保留两位小数
private double SetMoney(string money)
{
string money1 = money;
var arr = money.ToString().Split('.');
if (arr.Length == 2)
{
if (arr[1].Length > 2)
{
money1 = arr[0] + "." + arr[1].Substring(0, 2);
}
}
return Convert.ToDouble(money1);
}