在C#中Math.Round默认实际上是用的IEEE舍入标准,不是四舍五入,而是四舍六入五取偶。也就是当小数点后是5的时候,取偶数。比如取一位小数,那么7.35会输出7.4,而7.45同样会输出7.4。
实现真正四舍五入需要用到 MidpointRounding.AwayFromZero 枚举项,同时传入的数值类型必须是decimal类型:
用法示例:
decimal dd= Math.Round((decimal)66.545, 2, MidpointRounding.AwayFromZero);
也可以自定义一个函数,实现正负数都可以四舍五入。
//d表示要四舍五入的数;i表示要保留的小数点后为数。
double Round(double d, int i)
{
if(d >=0)
{
d += 5 * Math.Pow(10, -(i + 1));
}
else
{
d += -5 * Math.Pow(10, -(i + 1));
}
string str = d.ToString();
string[] strs = str.Split('.');
int idot = str.IndexOf('.');
string prestr = strs[0];
string poststr = strs[1];
if(poststr.Length > i)
{
poststr = str.Substring(idot + 1, i);
}
string strd = prestr + "." + poststr;
d = Double.Parse(strd);
return d;
}