是否存在C# Math.Round函数或重载实现特殊定价舍入规则?
特殊定价舍入的实现方案
你的需求很明确:输入是三位小数的价格,只要小数点后第一位后面还有非零数字,就把第一位小数进1,否则保持不变。举几个对应例子:
- 10.300 → 10.3
- 10.301 → 10.4
- 10.333 → 10.4
关于Math.Round的直接用法
标准的Math.Round不管是默认的四舍五入,还是银行家舍入规则,都不符合你的需求。比如Math.Round(10.301, 1)会得到10.3,根本达不到你要的强制进一位效果,所以没法直接用它实现。
现成工具包的情况
市面上的通用数学工具包基本不会专门做这种业务属性极强的舍入规则,毕竟这属于特定定价场景的需求,不是通用的数学舍入逻辑。
最简单的实现方式
其实不用写复杂的自定义方法,用标准库的向上取整方法就能搞定:
把价格先乘以10,对结果做向上取整,再除以10就行。对应例子的逻辑:
- 10.300 ×10 =103,向上取整还是103,除以10得10.3
- 10.301 ×10=103.01,向上取整是104,除以10得10.4
- 10.333 ×10=103.33,向上取整是104,除以10得10.4
以C#为例,核心代码就一行:
decimal roundedPrice = Math.Ceiling(originalPrice * 10) / 10;
如果是Java等其他语言,逻辑完全一致,用对应语言的Math.ceil()方法即可。
内容的提问来源于stack exchange,提问作者Gazrok
相关产品推荐
相关产品推荐

