在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;
}
(adsbygoogle = window.adsbygoogle || []).push({});