C#四舍五入、上取整、下取整 c 中四舍五入取整

在处理一些数据时,我们希望能用“四舍五入”法实现,但是C#采用的是“四舍六入五成双”的方法,如下面的例子,就是用“四舍六入五成双”得到的结果:

double d1 = Math.Round(1.25, 1);//1.2double d2 = Math.Round(1.24, 1);//1.2double d3 = Math.Round(1.26, 1);//1.3double d4 = Math.Round(1.35, 1);//1.4

为了用C#来实现“四舍五入”,我写了下面的函数:

代码
     ///     /// 实现数据的四舍五入法   ///     /// 要进行处理的数据    /// 保留的小数位数    /// 四舍五入后的结果    private double Round(double v, int x)    {        bool isNegative = false;        //如果是负数        if (v <</span> 0)        {            isNegative = true;            v = -v;        }        int IValue = 1;        for (int i = 1; i <= x; i++)        {            IValue = IValue * 10;        }        double  Int = Math.Round(v * IValue + 0.5, 0);        v = Int / IValue;                if (isNegative)        {            v = -v;        }        return v;    }

经过简单的测试,上面的函数能实现对数据的四舍五入法。

Math.Round()在四舍五入时有个问题:

Math.Round(2.5,0)=2;

Math.Round(3.5,0)=4;

2.5应该等于3才对!

在ASP中也存在这个问题,不过ASP中还有个FormatNumber可以用,但目前还不知道怎么使用?

解释:

Math.Round()准确的说,这个函数不是四舍五入,而是四舍六入五凑偶,就是说小于4或大于6的该舍该入是没有争议的,而5处在正中间,如果四舍五入则会造成数据的整体偏差,所以采取的原则是:如果舍入位为5,则舍入后最后一位为偶数,这是国际惯例。

现在做的项目都要5入,解决方法:

目前做法是:

如:(3.45*10+0.5)取整,再除以10

C#中没有四舍五入函数,事实上我知道的程序语言都没有四舍五入函数,因为四舍五入算法不科学,国际通行的是Banker舍入法Banker'srounding(银行家舍入)算法,即四舍六入五取偶。事实上这也是IEEE规定的舍入标准。因此所有符合IEEE标准的语言都应该是采用这一算法的

Math.Round方法默认的也是Banker舍入法在.NET2.0中Math.Round方法有几个重载方法

Math.Round(Decimal,MidpointRounding)

Math.Round(Double,MidpointRounding)

Math.Round(Decimal,Int32,MidpointRounding)

Math.Round(Double,Int32,MidpointRounding)

将小数值舍入到指定精度。MidpointRounding参数,指定当一个值正好处于另两个数中间时如何舍入这个值

该参数是个MidpointRounding枚举

C#四舍五入、上取整、下取整 c 中四舍五入取整
此枚举有两个成员:

AwayFromZero当一个数字是其他两个数字的中间值时,会将其舍入为两个值中绝对值较大的值。

ToEven当一个数字是其他两个数字的中间值时,会将其舍入为最接近的偶数。

所以,要实现四舍五入函数,对于正数,可以加一个MidpointRounding.AwayFromZero参数指定当一个数字是其他两个数字的中间值时其舍入为两个值中绝对值较大的值,例:

Math.Round(3.45,2,MidpointRounding.AwayFromZero)

不过对于负数上面的方法就又不对了

因此需要自己写个函数来处理

doubleChinaRound(doublevalue,intdecimals)
{
  if(value<0)
  {
    returnMath.Round(value+5/Math.Pow(10,decimals+1),decimals,MidpointRounding.AwayFromZero);
  }
  else
  {
    returnMath.Round(value,decimals,MidpointRounding.AwayFromZero);
  }
}

有些时候不一定要用四舍五入的,可能需要上取整或下取整:

Math.Ceiling()和Math.Floor

Math.Ceiling(3.1)=4;
Math.Floor(3.9)=3;

取天板值与地板值,与"四舍五入"无关。其实Floor的结果与(int)相同,因此也可以这样写Math.Floor((double)2/3+0.5)

floor和ceil是mathunit里的函数,使用前要先UsesMath。

trunc和round是systemunit里的函数,缺省就可以用。

floor直接往小的取,比如floor(-123.55)=-124,floor(123.55)=123

trunc直接切下整数,比如trunc(-123.55)=-123,floor(123.55)=123

ceil直接往大的取,比如ceil(-123.55)=-123,ceil(123.55)=124

round计算四舍五入,比如round(-123.55)=-124,round(123.55)=124

C#取整函数向上取整实例

inta=5;

intb=2;

lbl.Text=Convert.ToString(Math.Ceiling((double)a/(double)b));

  

爱华网本文地址 » http://www.413yy.cn/a/25101015/284052.html

更多阅读

衣服上取不下来的白狐狸毛领怎么洗啊 迷之白狐狸

衣服上取不下来的白狐狸毛领怎么洗啊?八四 消毒水 可以 把黄色 去掉 但是 不能 时间 过 长 你还是休息 的时候 在 泡 在那看这 30 分中 就行 了 泡 完 用清 水 多 冲洗下 就能变 白 了 记 住 别 放洗衣粉裘皮皮衣一般采用四氯乙烯干

声明:《C#四舍五入、上取整、下取整 c 中四舍五入取整》为网友酒畅饮分享!如侵犯到您的合法权益请联系我们删除