C#实现数值向上取整至最近5的方法咨询
实现向上取整到下一个5的倍数的方法
你遇到的问题核心是混淆了四舍五入和向上取整的逻辑:Math.Round是做四舍五入处理,而你需要的是无论小数部分多大,都向上进位到最近的5的倍数,这时候应该用Math.Ceiling方法来实现。
正确的实现代码
针对你的货币场景需求,正确的计算方式如下:
double roundedValue = Math.Ceiling(value / 5) * 5;
我们来验证你给出的两个数值:
- 对于73.59:
73.59 / 5 = 14.718,Math.Ceiling(14.718)返回15,15 * 5 = 75,完全符合你的预期。 - 对于46.28:
46.28 / 5 = 9.256,Math.Ceiling(9.256)返回10,10 * 5 = 50,也正好是你想要的结果。
为什么之前的方法不生效?
Math.Round(Value / 5) * 5是对除以5后的结果做四舍五入,比如14.718会被四舍五入到14,所以得到70;9.256四舍五入到9,得到45,这是四舍五入的正常逻辑,和你需要的向上取整完全不同。MidpointRounding.AwayFromZero只是改变了中间值(比如x.5的情况)的取舍规则,但它本质还是四舍五入逻辑,不是向上取整,所以无法解决你的问题。
额外说明
如果你的数值正好是5的倍数(比如75),Math.Ceiling(75/5)*5会返回75,不会错误地进位到80,完全适配货币场景的严谨需求。
内容的提问来源于stack exchange,提问作者Ruben Redman
相关产品推荐
相关产品推荐

