Math.Round函数四舍五入的问题

博客讨论了.NET中Math.Round函数使用时的误解,指出其遵循银行家舍入规则,而非常规的四舍五入。Banker's Rounding确保舍入结果的公平性,通过奇进偶舍的原则。文章通过举例说明了Math.Round在处理1.865时返回1.86的问题,并推荐使用Math.Round函数结合MidpointRounding.AwayFromZero参数来实现标准的四舍五入行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Net中Math.Round与四舍五入
有不少人误将Math.Round函数当作四舍五入函数在处理, 结果往往不正确, 实际上Math.Round采用的是国际通行的是 Banker 舍入法.  Banker's rounding(银行家舍入)算法,即四舍六入五取偶
而出现问题的单价就是1.865,函数Math.Round(1.865,2)的返回值却是1.86,按照四舍五入的原则,结果应该是1.87才对。

原来四舍五入也有个国际惯例,叫奇进偶舍,意思是当舍入位前面一位是奇数时,就进,为偶数时,就舍,这也是体现公平性的原理。

采用Math.Round(price,2,MidpointRounding.AwayFromZero)就可以了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值