You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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) → 245
  • round_five_or_nine_int(247) → 249
  • round_five_or_nine_int(249) → 249
  • round_five_or_nine_int(245) → 245

完全符合你要的定价取整逻辑!

内容的提问来源于stack exchange,提问作者Dean

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:42:08