ページに表示する価格の値がいくつかあります。
私はフロート価格を取り、フォーマットされた通貨valも通貨コードで返す関数を書いています。
たとえば、fnPrice(1001.01)
は$ 1,000.01
最も簡単な答えは number_format()
です。
_echo "$ ".number_format($value, 2);
_
アプリケーションを複数の通貨とロケール対応の書式設定(たとえば、一部のヨーロッパ人の場合は_1.000,00
_)で動作させるには、少し複雑になります。
money_format()
がありますが、Windowsでは機能せず、setlocale()
に依存しています。これは、(任意に名前付き)サーバー側のロケールパッケージ。
アプリケーションを真剣に国際化したい場合は、Zend Frameworkの Zend_Locale や Zend_Currency のような本格的な国際化ライブラリの使用を検討してください。
PHP 5.3+のintl拡張を使用すると、 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);
}
この小さな関数を作成して、すべてを自動的にNice通貨形式にフォーマットします。
function formatDollars($dollars)
{
return "$".number_format(sprintf('%0.2f', preg_replace("/[^0-9.]/", "", $dollars)),2);
}
編集
これは負の値を示さないことが指摘されました。書式を編集しやすくするために、2行に分割しました。負の値の場合は、括弧で囲みます。
function formatDollars($dollars)
{
$formatted = "$" . number_format(sprintf('%0.2f', preg_replace("/[^0-9.]/", "", $dollars)), 2);
return $dollars < 0 ? "({$formatted})" : "{$formatted}";
}
PHPには、これを行うためのmoney_format
という関数があります。これについて読む here 。
<?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
?>