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