C#使用Math.Round()四舍五入

C#使用Math.Round()四舍五入

1.使用重载函数Math.Round(值,精确位数)      ( 四舍六入五取偶)

如果不指定第三个参数,则等效为第三参数指定MidpointRounding.ToEven,即向最近的偶数四舍五入。

这个时候不是我们通常认为的四舍五入

2.使用重载函数Math.Round(值,精确位数,MidpointRounding.AwayFromZero

当第三个参数设置为MidpointRounding.AwayFromZero,从字面上看,是指向远离 0 的地方四舍五入

例:Response.Write(Math.Round(1.5,0, MidpointRounding.AwayFromZero).ToString());   返回值:2

经测试,个别小数使用2方法依然不能四舍五入,以526.925为例,使用方法2:

Math.Round(526.925,2, MidpointRounding.AwayFromZero)  返回值:526.92

围绕该小数进一步测试发现,百位数5,6,十分位4、9,百分位数字2、3,十位数字和个位数字任意,当取2位小数时会出现四舍五入失灵的情况。

此时,需要将double转化为decimal类型进行四舍五入

Math.Round((decimal)526.925,2, MidpointRounding.AwayFromZero)

综上,若要使用四舍五入取值,则尽量在double前面加decimal。可能为为double转decimal之后提高了精度

注:

1. decimal:属于精度高于double类型的浮点型(28个有效位)

2. double和float都是浮点型,存在精度损失,高精度计算数值时采用浮点型是很危险的,具体参考:https://www.cnblogs.com/lonelyxmas/p/3591132.html

猜你喜欢

转载自blog.csdn.net/xindiai/article/details/79026868