如何使用stringformat将99.99向上取整为100,不使用math.round
不使用Math.Round通过String.Format实现99.99向上取整为100的方案
核心实现逻辑
String.Format本身默认的数值格式化规则为四舍五入,要实现向上取整效果,可配合极小数值偏移实现,无需调用Math.Round方法。如果你的使用场景中数值最多保留2位小数,仅需对存在小数部分的数值做整数进位,可参考以下实现方案:
不同语言代码示例
- C# 实现
double targetNum = 99.99; // 偏移量设置为小于0.01的数值即可,此处取0.005,既满足99.99进位为100,也不会导致整数误进位 string formatResult = string.Format("{0:N0}", targetNum + 0.005); // 输出结果:100 // 整数验证:99.00 + 0.005 = 99.005,格式化后输出结果为99,符合预期
- Java 实现
double targetNum = 99.99; String formatResult = String.format("%.0f", targetNum + 0.005); // 输出结果:100
- Python 实现
target_num = 99.99 format_result = "{:.0f}".format(target_num + 0.005) # 输出结果:100
注意事项
- 偏移量取值需匹配你使用场景下的数值精度:如果场景中数值最多保留N位小数,偏移量取
5 * 10^-(N+1)即可,既可以保证小数部分满足向上进位的要求,也不会导致整数类型的数值出现误进位问题。 - 如果需要向上取整后保留指定位数的小数,调整偏移量和格式化占位符的小数位数即可,比如需要保留1位小数,偏移量取
0.005,格式化占位符设置为保留1位小数即可。
内容的提问来源于stack exchange,提问作者Jane wang
相关产品推荐
相关产品推荐

