[PHP] 小数点以下の末尾の0を表示する [sprintf,number_format]

この記事は約4分で読めます。
スポンサーリンク

(2024年9月)

sprintfを使う

$atai = 100.10 ;

print $atai ;// 100.1 ← 右端の「0」が消えてしまう

$atai = sprintf(“%.2f”,$atai) ;

print $atai ;// 100.10 ← 右端の「0」が残せる

$atai = 123.4567890 ;

print $atai ;// 123.456789 ← 右端の「0」が消えてしまう

$atai = sprintf(“%.7f”,$atai) ;// 小数点以下の桁数を指定(7)

print $atai ;// 123.4567890 ← 右端の「0」が残せる

$atai = sprintf(“%.10f”,$atai) ;// 右端に0を多数付けることも可能

print $atai ;// 123.4567890000

$atai = sprintf(“%.2f”,$atai) ;// 小数点以下第三位の「6」が四捨五入されて「123.46」となる

print $atai ;// 123.46

number_formatを使う

単にnumber_formatだけでは、小数点以下第一位が四捨五入されて整数部分のみとなってしまい、かつ、千の位毎にカンマで区切られてしまう。

$atai = 12345.67890 ;

$atai = number_format($atai) ;

print $atai ;// 12,346

if(is_numeric($atai)){

print “数値である” ;

}else{

print “数値ではない” ;// カンマが付加されているので「数値ではない」と判断される

}

なので、以下のオプションを指定する。

$atai = number_format($atai,5,”.”,””) ;// 値、小数点以下の桁数、小数点を表す区切り文字、千の位毎の区切り文字

print $atai ;// 12345.67890

if(is_numeric($atai)){

print “数値である” ;// カンマが付加されていないので「数値である」と判断される

}else{

print “数値ではない” ;

}

number_formatで「小数点以下の桁数」「千の位毎の区切り文字」を指定することで、千単位で区切り、かつ、小数点以下の桁数(末端が0であっても残す)という表示も可能。

$atai = 12345.67890 ;

$atai = number_format($atai,5,”.”,”,”) ;

print $atai ;// 12,345.67890

四捨五入された結果生じた、右端の「0」も残せる。

$atai = 12345.9999999999 ;// 9が10個

$atai = number_format($atai,9,”.”,”,”) ;

print $atai ;// 12,346.000000000 ← 0が9個

number_formatでカンマを付けると数値と判断されなくなるので、カンマを付けるのは各種計算が終わった最終段階(=結果表示)で行う。

printfとsprintf

printfは表示、sprintfは値を返す。

なので、sprintfで表示をするためには、変数に格納してprintすればよい。

printf(“%.2f”,12345.67890) ;// 12345.68

$atai = sprintf(“%.2f”,12345.67890) ;// 変数に格納

print $atai ;// そして表示(12345.68)

vsprintf

配列を引数とする。

$ymd = “2000-1-1” ;// 月と日の頭に「0」を付けたい

list($y,$m,$d) = explode(“-“,$ymd) ;// ハイフンで区切って配列化

$y = sprintf(“%04d”,$y) ;// 999年以前の場合は頭に「0」を付けて4桁にする
$m = sprintf(“%02d”,$m) ;// 1桁の場合は頭に「0」を付けて2桁にする
$d = sprintf(“%02d”,$d) ;// 1桁の場合は頭に「0」を付けて2桁にする

$ymd = “{$y}-{$m}-{$d}” ;// ハイフンで結合

print $ymd ;// 2000-01-01 ← OKだが面倒

$ymd = vsprintf(“%04d-%02d-%02d”,explode(“-“,$ymd)) ;// 配列ゴトヴッコム!

print $ymd ;// 2000-01-01

関連:負の整数の符号なし整数表現

関連:[PHP] 添字配列や連想配列に要素を追加する方法 [array_push,array_merge]

関連:[PHP] 秒を時分秒に変換する方法 [gmdateは危険]

関連:[PHP] checkdateが意味不明杉流件 [クヅォ]

関連:[PHP] 指定日から”+1 day”とか [strtotime]

関連:[PHP] date(日付)のフォーマット一覧 [年/月/日/時/分/秒/曜日]

タイトルとURLをコピーしました