(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が意味不明杉流件 [クヅォ]