PHP实现商品价格向上取整至最近5或9的方法求助
嘿,针对商品定价的这种向上取整需求我太熟悉了!要实现把价格向上取整到最近的5或9结尾(比如243→245,247→249),我们可以基于数字的个位来判断逻辑,替代原来只能取整到5的round_five函数。
先给你一个能兼容整数和小数的完整函数:
function round_five_or_nine($num) { $floor_num = floor($num); $units_digit = $floor_num % 10; // 处理有小数的情况(比如249.1需要跳到255) if ($num > $floor_num) { if ($units_digit === 9) { return $floor_num + 6; // 249 + 6 = 255 } elseif ($units_digit <= 4) { return $floor_num + (5 - $units_digit); } else { return $floor_num + (9 - $units_digit); } } // 处理整数情况 else { if ($units_digit <= 4) { return $floor_num + (5 - $units_digit); } elseif ($units_digit <= 8) { return $floor_num + (9 - $units_digit); } else { return $floor_num; // 个位是9时保持原数 } } }
函数逻辑说明:
- 先提取数字的整数部分和个位数字
- 如果原数带有小数(比如244.9),说明需要向上进位处理:
- 个位0-4:补到最近的5结尾(244.9→245)
- 个位5-8:补到最近的9结尾(247.2→249)
- 个位9:直接跳到下一个5结尾的数(249.1→255)
- 如果是整数:
- 个位0-4:补到5结尾(243→245)
- 个位5-8:补到9结尾(247→249)
- 个位9:保持原数不变(249→249)
简化版(仅处理整数价格)
如果你的商品价格都是整数,这个简化版足够用:
function round_five_or_nine_int($num) { $units_digit = $num % 10; if ($units_digit <= 4) { return $num + (5 - $units_digit); } elseif ($units_digit <= 8) { return $num + (9 - $units_digit); } else { return $num; } }
测试几个例子看看:
round_five_or_nine_int(243)→ 245round_five_or_nine_int(247)→ 249round_five_or_nine_int(249)→ 249round_five_or_nine_int(245)→ 245
完全符合你要的定价取整逻辑!
内容的提问来源于stack exchange,提问作者Dean
相关产品推荐
相关产品推荐

