- ベストアンサー
sprintfについて
perlで sprintf("%.2d") と sprintf("%02d") の違いは何なのでしょうか? 私は、下をよく使います。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
perldoc -f sprintf によると, %02d だと「右詰めで少なくとも 2桁表示 (先頭は 0 で埋める)」 %.2d だと「少なくとも 2桁になるように先頭に 0 を追加」 ということになります. まあ, この場合には結果的に同じ. ちなみに %#02x と %#.2x は違います. 前者は 0x を含めて 2桁 (以上), 後者は 0x のあとに 2桁 (以上).
その他の回答 (3)
- sakusaker7
- ベストアンサー率62% (800/1280)
すみません。見事に '.' を見落としておりました。 sprintf/printf の書式は % フラグ 最小フィールド幅 '.' 精度 's/d/x'などなど という具合になっていますが、 対象が 'd' のときはCでの規格の文章を借りれば > int 引き数を符号付き 10 進表記に変換する。 > 精度指定があれば、精度で指定した桁数は必ず出力される。 > 変換後の値が指定された桁数に足りない場合は、 > 左側が 0 で埋められる。デフォルトの精度は 1 である。 ということですので、#2でTacosan さんが書かれているとおり 質問にある事例では違いが出ないということになります。
- steel_gray
- ベストアンサー率66% (1052/1578)
#1さんを補足すると 実行結果: format=%2d : 3 ←3の前には半角スペースが在ります。 (htmlでは半角スペースは今回のように詰めて表示されてしまうケースがあるのでperl≒htmlを出力するものと考えると %02dの出番はあっても%2dの出番はあまりありませんね。) 15 100 format=%02d : 03 15 100
- sakusaker7
- ベストアンサー率62% (800/1280)
数値の桁数がフィールドの桁数より小さいときに なにで埋めるかが変わります。 use strict; use warnings; my @fmts = qw(%2d %02d); foreach my $fmt (@fmts) { printf "format=%s :\n", $fmt; foreach my $val (3, 15, 100) { printf "$fmt\n", $val; } } 実行結果: format=%2d : 3 15 100 format=%02d : 03 15 100
補足
回答ありがとうございます。 %2dと%02dの違いでなくて、 %.2dと%02dの違いをお聞きしたかったのですが、 .が見えにくかったようです。