Печать номера денежного формата в PHP - PullRequest
40 голосов
/ 25 октября 2010

У меня есть несколько ценовых значений для отображения на моей странице.

Я пишу функцию, которая берет плавающую цену и возвращает форматированный валютный вал с кодом валюты ..

Например,, fnPrice(1001.01) следует напечатать $ 1,000.01

Ответы [ 6 ]

110 голосов
/ 25 октября 2010

Самый простой ответ: number_format().

echo "$ ".number_format($value, 2);

Если вы хотите, чтобы ваше приложение могло работать с несколькими валютами и с форматированием с учетом региональных настроек (1.000,00 для некоторыхиз нас, европейцев, например), это становится немного сложнее.

Существует money_format(), но он не работает в Windows и использует setlocale(), что является мусором вНа мой взгляд, поскольку для этого требуется установка (произвольно названных) пакетов локали на стороне сервера.

Если вы хотите серьезно интернационализировать свое приложение, рассмотрите возможность использования полноценной библиотеки интернационализации, такой как Zend Framework Zend_Locale и Zend_Currency .

50 голосов
/ 03 сентября 2013

с расширением 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 €
7 голосов
/ 25 октября 2010

sprintf () - это функция PHP для всех видов форматирования строк http://php.net/manual/en/function.sprintf.php

Я использую эту функцию:

function formatDollars($dollars){
  return '$ '.sprintf('%0.2f', $dollars);
}
4 голосов
/ 21 марта 2014

Я построил эту маленькую функцию для автоматического форматирования чего-либо в хороший формат валюты.

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}";
}
1 голос
/ 23 июня 2017

PHP имеет функцию под названием money_format для этого.Читайте об этом здесь .

0 голосов
/ 30 мая 2019
<?php

$number = 1234.56;

// english notation (default)
$english_format_number = number_format($number);
// 1,235

// French notation
$nombre_format_francais = number_format($number, 2, ',', ' ');
// 1 234,56

$number = 1234.5678;

// english notation without thousands separator
$english_format_number = number_format($number, 2, '.', '');
// 1234.57

?>
...