如何实现特定小数舍入规则?解决round($price,1)不符合需求的问题
自定义舍入规则实现方案
规则明确
根据你的示例,舍入逻辑可总结为:
- 保留1位小数
- 若小数点后第一位为4,且第二位≥1,直接向上舍入到0.5
- 其他情况遵循常规四舍五入规则
PHP实现代码
针对你的需求,可自定义函数实现该逻辑,避开原生round()的局限性:
function customRound($price) { // 转换为整数规避浮点数精度误差 $totalCents = round($price * 100); // 提取小数点后第一位和第二位对应的数值 $firstDecimal = floor($totalCents / 10) % 10; $secondDecimal = $totalCents % 10; if ($firstDecimal === 4 && $secondDecimal >= 1) { // 触发特殊舍入规则,进位到0.5 return floor($price) + 0.5; } else { // 常规四舍五入到1位小数 return round($price, 1); } } // 测试验证 echo customRound(46.38); // 输出 46.4 echo customRound(46.40); // 输出 46.4 echo customRound(46.41); // 输出 46.5
代码说明
- 先将价格转换为分(整数),避免浮点数运算的精度偏差
- 判断小数点后第一位是否为4且第二位≥1,符合条件则直接进位到0.5
- 其余场景沿用原生
round()的常规四舍五入逻辑
内容的提问来源于stack exchange,提问作者nas
相关产品推荐
相关产品推荐

