0

提前致谢。

我有一个 WP WooCommerce 商店,需要上传一些小数点后 3 位的价格,例如 0.012 英镑(以 000 的数量购买的产品)。

我的大部分产品都是“普通”的,有 2 位小数。

WooCommerce 中有一个功能允许小数点后 3 位 - 很好。还有一个删除尾随零的功能,但如果它是一个整数,它会删除它们,例如 £10.00 变为 £10。

当 95% 的“普通”价格产品开始显示 10.000 英镑或 5.230 英镑时,我的问题就出现了。

简而言之,我正在寻找一种删除尾随零的方法,但仅限于小数点后 3 位;

保留 - £0.012 删除任何价格的第 3 位小数 0,例如 £10.00 或 £5.23

有没有人有好的解决方案?

谢谢

4

3 回答 3

3

如果要使用正则表达式,可以将它们与

 (?<=\d{2})(0+)$

 preg_replace("/(?<=\d{2})(0+)$/", "", $price_string)

匹配至少两位数之后的所有零。(它将匹配括号中的零):

12.002(0)
12.00(0000)
12.01(000000)
12.232(0)
12.123
于 2013-08-02T16:01:19.027 回答
1

if else 语句可能会起作用,除非您也有像 10.001 这样的价格:

$price = '0.001';

if ($price < 1) {
    // don't round
} else {
    $price = number_format($price, 2);
}

要不就

$price = ( $price < 1 ) ? $price : number_format($price, 2) ;
于 2013-08-02T16:04:16.747 回答
0

为什么不只是这样↓?

$numberAsString = number_format($yourUglyNumber, 2, '.', ' ');

PHP 函数 number_format


如果您将数字作为带有货币符号的字符串,您可以首先将其过滤掉:

$moneyString = "£300.4578525";

// remove all non-numeric and cast to number
$moneyNum = preg_replace("/[^0-9.]/", "", $moneyString) + 0;

// format
$formatted = number_format($moneyNum, 2, '.', ' ');

// add the money symbol if you want
$formatted = '£' + $formatted.
于 2013-08-02T15:52:26.837 回答