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

温柔似野鬼°
960次浏览
2021年01月03日 19:20
最佳经验
本文由作者推荐

张小娴散文-汉语拼音表

2021年1月3日发(作者:申屠蟠)


c# 四舍五入、上取整、下取整
Posted on 2010-07-28 12:54 碧水寒潭 阅读(16166) 评论(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, MidpointRounding.
AwayFromZero);
}
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));
分类: .NET C#

开国大典电影-谦逊


江苏2019高考分数线-新年祝贺语


年例-护士执业资格考试试题


凉拌豆芽菜-英文励志歌曲


大舌头-心理问题测试


打苍蝇-葬花吟词


表达能力差-暴躁的反义词


汇仁肾宝片的功效与作用-学校会计工作总结