У меня есть некоторые значения цены для отображения на моей странице.
Я пишу функцию, которая принимает цену поплавка и возвращает форматированный валютный вал с кодом валюты тоже.
Например, fnPrice(1001.01)
должен печатать $ 1,000.01
Самый простой ответ – number_format()
.
echo "$ ".number_format($value, 2);
Если вы хотите, чтобы ваше приложение могло работать с несколькими валютами и форматом, 1.000,00
на языковой стандарт (например, 1.000,00
для некоторых из нас, например, для европейцев), он становится немного более сложным.
Существует money_format()
но он не работает в Windows и полагается на setlocale()
, что, на мой взгляд, является мусором, потому что для него требуется установка (произвольно названных) локальных пакетов на стороне сервера.
Если вы хотите серьезно интернационализировать свое приложение, подумайте об использовании полномасштабной библиотеки интернационализации, такой как Zend Framework Zend_Locale и Zend_Currency .
с расширением intl в PHP 5.3+, вы можете использовать класс NumberFormatter :
$amount = '12345.67'; $formatter = new NumberFormatter('en_GB', NumberFormatter::CURRENCY); echo 'UK: ', $formatter->formatCurrency($amount, 'EUR'), PHP_EOL; $formatter = new NumberFormatter('de_DE', NumberFormatter::CURRENCY); echo 'DE: ', $formatter->formatCurrency($amount, 'EUR'), PHP_EOL;
который печатает:
UK: €12,345.67 DE: 12.345,67 €
sprintf () – это функция PHP для всех видов форматирования строк http://php.net/manual/en/function.sprintf.php
Я использую эту функцию:
function formatDollars($dollars){ return '$ '.sprintf('%0.2f', $dollars); }
Я построил эту маленькую функцию, чтобы автоматически форматировать что-либо в хороший формат валюты.
function formatDollars($dollars) { return "$".number_format(sprintf('%0.2f', preg_replace("/[^0-9.]/", "", $dollars)),2); }
редактировать
Было указано, что это не показывает отрицательных значений. Я разбил его на две строки, чтобы было легче редактировать форматирование. Оберните его в скобки, если это отрицательное значение:
function formatDollars($dollars) { $formatted = "$" . number_format(sprintf('%0.2f', preg_replace("/[^0-9.]/", "", $dollars)), 2); return $dollars < 0 ? "({$formatted})" : "{$formatted}"; }
Для этого PHP имеет функцию money_format
. Читайте об этом здесь .