C#中Math.Round(4.25,1)返回4.2而非4.3的原因及解决方法
Math.Round(4.25,1)返回4.2而非4.3的原因及解决方法
问题原因
C#中的Math.Round方法默认采用银行家舍入法(四舍六入五成双),这套规则的核心逻辑是:当需要舍去的数字恰好是5,且前一位数字为偶数时,直接舍去该位;若前一位是奇数,则向前进位。
对于Math.Round(4.25,1),我们需要保留1位小数,此时要判断的是小数点后第二位的5,而它的前一位是2(偶数),所以按照规则会舍去这个5,最终得到4.2。
解决方法
如果希望得到4.3,也就是使用常规的“四舍五入”逻辑,可以调用Math.Round的重载方法,传入MidpointRounding.AwayFromZero参数,该参数会让舍入时向远离0的方向进位:
decimal avg = Math.Round(4.25, 1, MidpointRounding.AwayFromZero);
执行这段代码后,结果就会是4.3。
内容的提问来源于stack exchange,提问作者Chaitanya Karmarkar
相关产品推荐
相关产品推荐

