本文主要详细介绍了C#舍入用法的实例,具有一定的参考价值。感兴趣的朋友可以参考一下。
# C中没有舍入函数,任何编程语言中都没有舍入函数,因为舍入算法不科学,国际上通行的方法是银行家舍入。
银行家舍入(Bankers rounding)算法,即四比六比五的奇偶校验。其实这也是IEEE规定的舍入标准。因此,所有符合IEEE标准的语言都应该采用这种算法。
数学。舍入方法默认为银行家舍入方法。
英寸NET 2.0,数学。Round方法有几个重载方法。
数学。舍入(小数,中点舍入)
数学。圆形(双精度,中点舍入)
数学。Round(小数,Int32,中点舍入)
数学。Round(Double,Int32,中点舍入)
将十进制值舍入到指定的精度。MidpointRounding参数,该参数指定当某个值正好位于其他两个数字的中间时,如何对该值进行舍入。
此参数是中点舍入枚举。
这个枚举有两个成员,在MSDN的描述是:
AwayFromZero当一个数字是另外两个数字的中间值时,它将被舍入到两个值中较小的绝对值。
即使一个数字是另外两个数字的中间值,它也会被舍入到最接近的偶数。
注意!关于中点取整的解释。这里的远离零是错的!实际上舍入到两个值中较大的绝对值。然而,MSDN的例子是正确的。最初的英文描述是,它向远离零的最接近的数字舍入。
所以要实现舍入功能,对于正数,可以加一个中点舍入。AwayFromZero参数,用于指定当一个数字是另外两个数字的中间值时,它将被舍入到两个值中绝对值较大的那个值,例如:
数学。Round(3.45,2,中点舍入。远离零点)
但是对于负数,上面的方法又错了。
所以需要自己写函数来处理。
第一个功能:
double Round(双精度值,整数小数)
{
如果(值为0)
{
回归数学。Round(值5 /数学。幂(10,小数1),小数,中点舍入。away from zero);
}
其他
{
回归数学。Round(数值、小数、中点舍入。away from zero);
}
}
第二个功能:
double Round(double d,int i)
{
如果(d=0)
{
d=5 *数学。Pow(10,-(I 1));
}
其他
{
d=-5 *数学。Pow(10,-(I 1));
}
string str=d . ToString();
string[] strs=str。拆分('.');
int idot=str。IndexOf(“.”));
string prestr=strs[0];
string poststr=strs[1];
if(poststr。长度I)
{
poststr=str。Substring(idot 1,I);
}
string strd=prestr ' . 'poststr
d=双精度。解析(strd);
返回d;
}
参数:d表示要舍入的数字;I表示要保留的小数位数。
第二种方法是对正数和负数都进行舍入。第一种方法是正数四舍五入,负数五除六。
备注:个人认为第一种方法适用于货币计算,第二种方法适用于数据统计显示。
这就是本文的全部内容。希望对大家的学习有帮助,支持我们。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。