0

基本的に、次のようにフォーマットされた適切に整列された列に一連の数値を出力しようとしています。

$##,###.##
$##,###.##

次のコードで

setlocale(LC_MONETARY, 'en_US.utf8');
money_format('%=0(#5.2n',$sum)

$sum が 1000 未満の場合を除いて機能します。たとえば、

$sum=1550.00;

(予想どおり)上記のコード出力

$01,550.00 

ただし、

$sum=167.00;

上記のスニペットの出力

$000167.00

明らかに、これは私が必要としているものではありません。ドキュメントによると

塗りつぶし文字が数字であっても、グループ区切り記号は塗りつぶし文字に適用されません。

したがって、これは関数の予想される動作です。意味がないように見えますが、それが機能する方法です。

パディングされた数字の適切なフォーマットを取得する方法についての提案をいただければ幸いです。

ありがとう!

4

1 に答える 1

0

独自の書式設定関数を作成できます。localeconv()は、区切り記号や通貨記号の位置などのデータを提供します。これは私が使用したもので、私のニーズに合っていました:

function my_number_format($amount) {
    // Get separators
    $l = localeconv();

    $str = number_format($amount, 2, $l['decimal_point'], $l['thousands_sep']);

    // manual padding
    while (strlen(preg_replace('/[^0-9]/', '', $str)) < 10) {
        $init = preg_replace('/[^0-9].*/', '', $str); // initial all-digit sequence
        $str = '0' . (strlen($init) == 3 ? $l['thousands_sep'] : '') . $str; 
    }

    return $amount;
}
于 2014-03-12T10:30:26.800 に答える