user2646560
user2646560

Reputation: 1

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

thanks in advance.

I have a WP WooCommerce store and need to upload some prices that have 3 decimal places, e.g. £0.012 (products that are purchased in volumes of 000s).

The majority of my products are 'ordinary' with 2 decimal places.

There is a function in WooCommerce that allows for 3 decimal places - fine. Also a function to delete trailing zeros, but it deletes them if it's an integer e.g. £10.00 becomes £10.

My problem arises when the 95% of 'ordinary' price products start showing £10.000 or £5.230.

In a nutshell I'm looking for a way to delete trailing zeros but ONLY after the 3 decimal place;

Retain - £0.012 Delete any 3rd decimal 0 on prices like £10.00 or £5.23

Does anyone have a good solution?

Thanks

Upvotes: 0

Views: 1503

Answers (3)

mzmm56
mzmm56

Reputation: 1292

an if else statement would probably work, unless you also have prices like 10.001:

$price = '0.001';

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

or just

$price = ( $price < 1 ) ? $price : number_format($price, 2) ;

Upvotes: 1

pajaja
pajaja

Reputation: 2202

If you want to use regular expressions you can match them with

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

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

to match all zeroes which come after at least two digits. (It will match the zeroes in parenthesis):

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

Upvotes: 3

MightyPork
MightyPork

Reputation: 18861

Why not just something like this ↓ ?

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

PHP function number_format


If you get the number as string with the money sign, you can first filter this out:

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

Upvotes: 0

Related Questions