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

萌到你眼炸
595次浏览
2021年01月03日 19:21
最佳经验
本文由作者推荐

银弹金弓-文明礼仪教育论文

2021年1月3日发(作者:山简)


在处理一些数据时,我们希望能用“四舍五入”法实现,但是C#采用的是“四舍六
入五 成双”的方法,如下面的例子,就是用“四舍六入五成双”得到的结果:
double d1 = (1.25, 1);1.2 double d2 = (1.24,
1);1.2 double d3 = (1.26, 1);1.3 double d4 =
(1.35, 1);1.4
为了用C#来实现“四舍五入”,我写了下面的函数:
代码
实现数据的四舍五入法 要进行处理的数据 保
留的小数位数 四舍五入后的结果 private double Round(double v, int x)
{ bool isNegative = false; 如果是负数 if (v < 0) { isNegative
= true; v = -v; } int IValue = 1; for (int i = 1; i <= x; i++) { IValue
= IValue * 10; } double Int = (v * IValue + 0.5, 0); v = Int
IValue; if (isNegative) { v = -v; } return v; }
经过简单的测试,上面的函数能实现对数据的四舍五入法。

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

(2.5,0) = 2;

(3.5,0) = 4;

2.5应该等于3才对!
在ASP中也存在这个问题,不过ASP中还有个FormatNumber可以用,但目前
还不知 道怎么使用?

解释:

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


一位为 偶数,这是国际惯例。

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

目前做法是:

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

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

方法默认的也是 Banker 舍入法 在 .NET 2.0 中 方法
有几个重载方法

(Decimal, MidpointRounding)

(Double, MidpointRounding)

(Decimal, Int32, MidpointRounding)

(Double, Int32, MidpointRounding)

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

该参数是个 MidpointRounding 枚举

此枚举有两个成员:

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

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



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

(3.45, 2, omZero)

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

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

double ChinaRound(double value, int decimals)
{
if (value < 0)
{

return (value + 5 (10, decimals + 1), decimals, Midpoin
omZero);
}
else
{

return (value, decimals, omZero);
}
}

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

g()和

g(3.1)=4;
(3.9)=3;

取天板值与 地板值,与四舍五入无关。其实Floor的结果与(int)相同,因此也
可以这样写((doubl e)23+0.5)



floor 和 ceil是math unit 里的函数,使用前要先 Uses Math。

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

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#取整函数向上取整实例

int a = 5;
int b = 2;
= ng(g((double)a (double)b));

什么是爱情-世间始终你好歌词


创意投资-唱游课


北京的大学排名-古词


金大福-章丘八大景


心理图书-英语四级写作模板


怎么安装打印机-travelling


高考科目及分数-赞美黄河的诗句


当那一天真的来临-孔雀东南飞翻译