C#中Math.Round(1.785m, 2)未正确舍入的问题咨询
Decimal类型1.785m两位小数舍入问题的解决方法
decimal虽然是十进制浮点类型,但1.785m在实际存储中是一个略小于1.785的精确值,这导致默认舍入逻辑(银行家舍入,即MidpointRounding.ToEven)会得到1.78m而非预期的1.79m。
标准解决方案
直接使用Math.Round方法并指定MidpointRounding.AwayFromZero舍入模式,该模式会让xx.xx5这类中间值向远离0的方向舍入:
decimal value = 1.785m; decimal result = Math.Round(value, 2, MidpointRounding.AwayFromZero); // 结果为 1.79m
关于你的临时方案
你手动通过放大数值、判断末位再调整的方法确实能得到正确结果,但标准的Math.Round写法更简洁规范,也更便于后续维护。
内容的提问来源于stack exchange,提问作者Jan Wiesemann
相关产品推荐
相关产品推荐

