如何删除PHP中小数点后第三位的尾随零


How to delete trailing zeros after the 3rd decimal place in PHP?

提前感谢。

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

我的大多数产品都是"普通"产品,小数点后两位。

WooCommerce中有一个函数允许小数点后3位-好。也是一个删除尾随零的函数,但如果是整数,它会删除这些零,例如£10.00变成£10。

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

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

保留0.012英镑删除价格(如10.00英镑或5.23英镑)上的任何第三个小数点0

有人有好的解决方案吗?

感谢

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

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

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

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

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) ;

为什么不做这样的事情↓ ?

$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.