【问题标题】:How to round sale price to the first decimal digit?如何将销售价格四舍五入到小数点后一位?
【发布时间】:2019-01-09 19:57:26
【问题描述】:

我正在使用 Orion 的 woocommerce 3.5.3 和 Woocommerce All Discounts 插件。 在我申请折扣后。价格如下:59.90 欧元 -> 47.92 欧元, 69.90 欧元 -> 55.92 欧元。等等

如何将其四舍五入到小数点后一位?

我已经尝试了一些解决方案,但都没有奏效。例如:

function round_price_product( $price ){
    // Return rounded price
    return round( $price );
}

【问题讨论】:

  • 你看手册了吗,php.net/manual/en/function.round.php?第三个参数应该更新它(PHP_ROUND_HALF_UP)。变量中有吗?
  • 小数是什么意思?您是否要四舍五入到最接近的欧元或美分?
  • 我正在尝试将值四舍五入到小数点后一位。例如。 47.90 而不是 47.92。
  • 47.90 instead of 47.92 不是问题所说的,那也是向下取整,而不是向上取整,不是吗?
  • 是的,对不起我的英语。

标签: php wordpress woocommerce


【解决方案1】:

如果我们将价格分成整数和分数,那么我们可以将分数四舍五入并使用 str_pad 确保我们不会丢失一个数字(47.9 而不是 47.90)

因为我们将分数除以 10,所以我们得到了一个可以零精度四舍五入的新分数。
然后将其乘以 10 以使其“恢复”原来的样子。

function round_price_product( $price ){
    // Return rounded price
    $parts = explode(".", $price);
    $parts[1] = round($parts[1]/10,0)*10;
    if($parts[1] == 100) { // round up to next integer
        $parts[0]++;
        $parts[1] = 0;
    }
    return $parts[0] . "." . str_pad($parts[1], 2, 0, STR_PAD_RIGHT);
}

echo round_price_product("47.92"); //47.90
// 47.95 -> 48.00
// 47.02 -> 47.00

https://3v4l.org/92sO1

【讨论】:

  • 我应该把它添加到我的主题的functions.php中吗?试过了,没有效果。
  • 我不知道你需要把它放在哪里。你需要自己弄清楚。但它应该做点什么。如果没有别的,创建一个错误。有错误吗?
  • @Elcorso 代码确实有效,如您在链接中看到的那样。一定是你这边出了点问题
猜你喜欢
  • 1970-01-01
  • 2023-03-28
  • 1970-01-01
  • 2017-03-26
  • 2012-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多