Как убрать нули в конце десятичной части числа с плавающей точкой?

У меня в базе данных цены товаров с 4 цифрами в десятичной части, т.е.

4.5000
0.0050
5.0000

Я хочу показать на сайте эти цены как минимум с 2 десятичными цифрами (без округления), т.е.

4.50
0.005
5.00

Я старался number_format, но это все еще оставляет 4 цифры в десятичной части.

А также мне нужно использовать разделитель тысяч в базовой части этого числа и собственный разделитель десятичной части.

Как это сделать?

2

Решение

function trimDecimalZero($num, $delim = ',', $tsep = ' ') {
@list($base, $decimals) = explode('.',
rtrim(number_format((float) $num, 4, '.', $tsep), '0'));

if (intval($decimals)) {
return sprintf('%s%s%s',
$base, $delim, strlen($decimals) < 2 ? $decimals .'0' : $decimals);
}

return sprintf('%s%s%02d', $base, $delim, $decimals);
}

$nums = [4.5000, 0.0050, 5.0000];
foreach ($nums as $num) {
var_dump(trimDecimalZero($num));
}

Результат, как и ожидалось;

строка (4) "4,50" строка (5) "0,005" строка (4) "5,00"
2

Другие решения

Попробуйте с —

echo number_format('4.5000', 2);

Обновить

$v = (float)'0.0050';
$newV = explode('.', $v);
if(strlen($newV[1]) < 2) {
$v = number_format($v, 2);
}
echo $v;
1

Для дальнейшего использования я еще раз изменил свой ответ и да, он выдает ожидаемые результаты:

function trimDecimalZero($number) {
$number += 0;
if(strlen(substr(strrchr($number, "."),1)) < 2) {
$number = sprintf("%0.2f", $number);
}
return $number;
}

echo trimDecimalZero(4.5000); //4.50
echo trimDecimalZero(0.00050); //0.00005
echo trimDecimalZero(5.0000); //5.00

Надеюсь, что это поможет будущим читателям!

1

Я думаю, что если это для демонстрации целей, вы можете сделать что-то вроде этого:

$number= 4.500000;
$number.= 'x';
$length = strlen($number);

$new_number = rtrim($number, '0x');
if (strlen($new_number) < $length) {
$new_number .= '0';
}

echo $new_number;
0
По вопросам рекламы [email protected]