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

如何实现特定小数舍入规则?解决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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 02:05:29