web-dev-qa-db-fra.com

Imprimer le format du numéro de devise en PHP

J'ai des valeurs de prix à afficher sur ma page.

J'écris une fonction qui prend le prix flottant et renvoie également la valeur de la monnaie formatée avec le code de la devise ..

Par exemple, fnPrice(1001.01) devrait imprimer $ 1,000.01

41
KoolKabin

La réponse la plus simple est number_format() .

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

Si vous voulez que votre application puisse fonctionner avec plusieurs devises et un format adapté aux paramètres régionaux (1.000,00 Pour certains d'entre nous Européens par exemple), cela devient un peu plus complexe.

Il y a money_format() mais cela ne fonctionne pas sur Windows et repose sur setlocale(), ce qui est à mon avis une ordure, car il nécessite l'installation de (arbitrairement nommés) packages locaux côté serveur.

Si vous souhaitez sérieusement internationaliser votre application, envisagez d'utiliser une bibliothèque d'internationalisation complète comme Zend Framework Zend_Locale et Zend_Currency .

116
Pekka 웃

avec l'extension intl dans PHP 5.3+, vous pouvez utiliser la classe 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;

qui imprime:

 UK: €12,345.67
 DE: 12.345,67 €
54
Mathieu

sprintf () est la fonction PHP pour toutes sortes de formatage de chaînes http://php.net/manual/en/function.sprintf.php

J'utilise cette fonction:

function formatDollars($dollars){
  return '$ '.sprintf('%0.2f', $dollars);
}
7
Jim

J'ai construit cette petite fonction pour formater automatiquement n'importe quoi dans un format de devise Nice.

function formatDollars($dollars)
{
    return "$".number_format(sprintf('%0.2f', preg_replace("/[^0-9.]/", "", $dollars)),2);
}

Modifier

Il a été souligné que cela ne montre pas de valeurs négatives. Je l'ai divisé en deux lignes, il est donc plus facile de modifier la mise en forme. Enveloppez-le entre parenthèses s'il s'agit d'une valeur négative:

function formatDollars($dollars)
{
    $formatted = "$" . number_format(sprintf('%0.2f', preg_replace("/[^0-9.]/", "", $dollars)), 2);
    return $dollars < 0 ? "({$formatted})" : "{$formatted}";
}
4
DAWTSF

PHP a une fonction appelée money_format pour cela. Lisez à ce sujet ici .

1
Pila
<?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

?>
0
sandeep kumar