У меня есть цены, сохраненные с точностью до пяти знаков после запятой, такие как:
1.95000
2.25000
0.01150
2.10000
2.00000
При отображении цен хотелось бы показать стандарт $X.XX
форматировать, если остальные цифры равны нулю, но если есть значащие цифры, я не хочу их вырезать (поэтому я не могу просто использовать number_format()
).
Например, вышеуказанные цены должны отображаться как:
1.95
2.25
0.0115
2.10
2.00
Этот процесс должен быть сделан на сотнях цен за страницу. Какой эффективный способ форматирования чисел таким способом?
Это некрасиво, но это делает работу:
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');
}
Это использует регулярное выражение, чтобы соответствовать все до конечных 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');