金額などの数値を1,000単位でカンマ区切りにしてくれる便利な関数がPHPにはあります。
number_format()
を使えば、桁が多い数値もとても見やすくなるでしょう。
number_format関数
数字を千位ごとにグループ化してフォーマットします。
数値をカンマで区切る
まずはオーソドックスな3桁ごとにカンマ区切りにしてみましょう。
1 2 3 4 |
// 出力の際にnumber_format()を使うだけでカンマ区切りに echo number_format(12800); // 12800 => 12,800 |
12,800
,
(カンマ)が3桁ごとに付き、とても見やすくなりました。
日本ではこのスタイルで表記されますね。
小数を区切る
小数をカンマで区切ってみましょう。
先ほどのやり方と、小数点以下の桁数を指定する2パターンで見てみます。
1 2 3 4 5 |
// 小数をnumbr_format()する echo number_format(12800.99); // 第二引数に小数点以下の桁数を指定する echo number_format(12800.99, 2); |
12,801
12,800.99
通常のnumber_format()
は四捨五入されましたが、第二引数に小数点以下の桁数を指定することで、四捨五入されず小数点以下まで表示されました。
別の記号で区切る
日本は,
カンマ区切りですが、スイスやドイツなどは.
(ピリオド)や'
(アポストロフィ)だったり、国によって区切り方も違います。
1 2 3 4 5 6 7 8 |
// ドイツの表記 => 12.800,99 echo number_format(12800.99, 2, ',', '.'); // フランスの表記 => 12 800,99 echo number_format(12800.99, 2, ',', ' '); // スイスの表記 => 12'800.99 echo number_format(12800.99, 2, ".", "'"); |
12.800,99
12 800,99
12’800.99
上記のように、区切り文字と小数点の記号が違います。
数値の区切りはドイツは.
(ピリオド)、フランスは 半角スペース、スイスは'
(アポストロフィ)です。
小数点の区切りはドイツとフランスは,
(カンマ)、スイスは日本と同じ.
(ピリオド)です。
number_format関数の構文
number_format ( 区切りたい数値 [ , 小数点以下の桁数 , 小数点の区切り文字 , 数値の区切り文字 ]([ ]は省略可) );
下記3パターンの使い方ができます。
- 通常の整数なら一番最初のサンプルのように、数値を指定するだけでカンマ区切りしてくれる。
- 小数になると小数点以下は四捨五入されるため、桁数を指定することでその位で四捨五入となる。
- 区切り文字を変えたい場合は、第三引数に小数点を、第四引数に数値の区切り文字を指定する。
第三引数を指定する場合は、第四引数とセットで指定しないとエラーになる。
HTMLエンティティとの併用
HTMLのタグをそのまま出力させるとセキュリティ上危ないため、HTMLエンティティ化させるのが通常ですね。
その際、number_format()
とどう併用したらいいのか分からず、いろいろ調べたことがありました。
1 2 3 4 5 |
// HTMLエンティティしながらnumber_formatする echo htmlspecialchars(number_format(12800),ENT_QUOTES,'utf-8'); // 関数名が長いので、独自関数化したものを使う echo h(number_format(12800)); |
上記のように、htmlspecialchars()
の中でnumber_format()
を使えばいいだけですね。
htmlspecialchars()
は長ったらしいので独自関数化していますが、その際は2番目のような書き方で使っています。
詳しくは以下の記事をご確認ください。
参考:PHPのhtmlspecialcharsでのHTMLエンティティ化と、一文字に簡略化方法