C# Math.Round方法异常行为疑问:为何结果不符预期?
关于
Math.Round(45.4545m, 2, MidpointRounding.AwayFromZero)结果的说明 你误解了MidpointRounding.AwayFromZero的生效逻辑:这个枚举值仅当要舍去的部分恰好等于中点值时,才会触发向远离0方向进位的规则。
具体到你的代码:
- 保留两位小数时,需要关注第三位及之后的数值总和。45.4545要舍去的部分是
0.0045,这个值小于两位小数对应的中点值0.005。 - 只有当舍去部分恰好等于
0.005时(比如输入值为45.455m),MidpointRounding.AwayFromZero才会让结果进位到45.46。 - 你的输入中舍去部分不足中点值,因此会直接截断多余位数,最终得到
45.45。
对比示例:
// 舍去部分为0.005,触发进位 Math.Round(45.455m, 2, MidpointRounding.AwayFromZero); // 结果:45.46 // 舍去部分为0.0045,不触发进位 Math.Round(45.4545m, 2, MidpointRounding.AwayFromZero); // 结果:45.45
内容的提问来源于stack exchange,提问作者Sergey
相关产品推荐
相关产品推荐

