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

WooCommerce:将价格四舍五入至两位小数的实现方案求助

WooCommerce:将价格四舍五入至两位小数的实现方案求助

嘿,我完全懂你遇到的这个头疼问题!支付网关要求必须开启两位小数设置,一开始用官方的去零代码add_filter( 'woocommerce_price_trim_zeros', '__return_true' );搞定了199.00这类价格的显示,结果碰到带百分比折扣的产品套装,折扣后的价格就变成184.15、184.65这种非整小数,完全不符合预期对吧?

别慌,我给你分享两个经过验证的解决方案,你可以按需尝试:

方案一:全局处理订单/商品最终价格(推荐)

这个方案会直接在价格计算环节就把数值四舍五入到整数,同时保留两位小数格式满足支付网关要求,不管是原价还是折扣价都适用。把下面的代码添加到主题的functions.php文件,或者用自定义代码插件(比如Code Snippets)来导入:

add_filter( 'woocommerce_calculated_total', 'round_woocommerce_prices_to_integer' );
function round_woocommerce_prices_to_integer( $total ) {
    // 对计算后的价格进行四舍五入
    $rounded_total = round( $total );
    // 格式化为两位小数,确保符合支付网关要求
    return number_format( $rounded_total, 2, '.', '' );
}

这段代码会让184.15自动变成184.00,184.65变成185.00,而且不会影响支付网关的两位小数校验。

方案二:单独修改商品显示价格

如果你只需要调整前端显示的价格,不改动后台计算逻辑,可以用这个过滤器:

add_filter( 'woocommerce_get_price_html', 'round_product_display_price', 10, 2 );
function round_product_display_price( $price_html, $product ) {
    // 获取商品的最终折扣价
    $actual_price = $product->get_price();
    // 四舍五入到整数
    $rounded_price = round( $actual_price );
    // 重新生成符合WooCommerce规范的价格HTML
    return wc_price( $rounded_price );
}

这个方法会让商品页面上显示的价格直接变成四舍五入后的整数,配合你之前的去零代码,前端就只会显示184、185这类整数,同时后台仍然保留两位小数格式满足支付要求。

小提醒

  • 添加代码前记得备份主题文件,或者用代码插件来管理,避免主题更新丢失修改。
  • 测试的时候一定要验证折扣计算后的价格和支付金额是否一致,确保不会出现金额差异的问题。

之前你找的代码可能没针对折扣后的价格计算环节处理,上面这两个方案应该能解决你的问题,先试试第一个全局处理的方案,更贴合你的需求哦~

备注:内容来源于stack exchange,提问作者Andersson77

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 14:23:00