如何删除PHP中第3个小数位后的尾随零?

时间:2013-08-02 15:45:57

标签: php decimal woocommerce

提前感谢。

我有一个WP WooCommerce商店,需要上传一些有3个小数位的价格,例如: £0.012(购买量为000s的产品)。

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

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

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

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

保留 - £0.012 删除价格为£10.00或£5.23

的任何第三个小数0

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

由于

3 个答案:

答案 0 :(得分:2)

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

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

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

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

12.002(0)
12.00(0000)
12.01(000000)
12.232(0)
12.123

答案 1 :(得分: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) ;

答案 2 :(得分:0)

为什么不这样呢?

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

<强> PHP function 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.