Эффективный способ удаления посторонних нулей из цен?

У меня есть цены, сохраненные с точностью до пяти знаков после запятой, такие как:

1.95000
2.25000
0.01150
2.10000
2.00000

При отображении цен хотелось бы показать стандарт $X.XX форматировать, если остальные цифры равны нулю, но если есть значащие цифры, я не хочу их вырезать (поэтому я не могу просто использовать number_format()).

Например, вышеуказанные цены должны отображаться как:

1.95
2.25
0.0115
2.10
2.00

Этот процесс должен быть сделан на сотнях цен за страницу. Какой эффективный способ форматирования чисел таким способом?

3

Решение

Это некрасиво, но это делает работу:

function formatPrice($price) {
$out = (float)$price; // Trim off right-hand 0's
$out = "$out"; // Typecast back to string
if ((strlen($out) - strpos($out, '.')) <= 2) { // Test for string length after decimal point
$out = number_format($out, 2); // Format back with 0's
}
return $out;
}

Тестирую это сейчас … Работает!

Вот одна строчка из моего другого комментария благодаря ответу @ FuzzyTree:

function formatPrice($price) {
return substr($price, 0, strpos($price, '.') + 3) . rtrim(substr($price, strpos($price, '.') + 3), '0');
}
2

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

Это использует регулярное выражение, чтобы соответствовать все до конечных 0

$i = "$1.00";
$pattern = '/\$(\d+)\.(\d\d)(0*)/';
$replacement = '\$$1.$2';
print preg_replace($pattern,$replacement,$i);

Еще один способ использования rtrim на все после первых 2 цифр справа от десятичной

$pos = strpos($i, '.') + 3;
print substr($i, 0, $pos) . rtrim(substr($i, $pos), '0');
3

По вопросам рекламы [email protected]