アプリ版:「スタンプのみでお礼する」機能のリリースについて

perlで

sprintf("%.2d")

sprintf("%02d")
の違いは何なのでしょうか?

私は、下をよく使います。

A 回答 (4件)

perldoc -f sprintf


によると,
%02d だと「右詰めで少なくとも 2桁表示 (先頭は 0 で埋める)」
%.2d だと「少なくとも 2桁になるように先頭に 0 を追加」
ということになります. まあ, この場合には結果的に同じ.
ちなみに %#02x と %#.2x は違います. 前者は 0x を含めて 2桁 (以上), 後者は 0x のあとに 2桁 (以上).
    • good
    • 0

すみません。

見事に '.' を見落としておりました。

sprintf/printf の書式は

% フラグ 最小フィールド幅 '.' 精度 's/d/x'などなど

という具合になっていますが、
対象が 'd' のときはCでの規格の文章を借りれば

> int 引き数を符号付き 10 進表記に変換する。
> 精度指定があれば、精度で指定した桁数は必ず出力される。
> 変換後の値が指定された桁数に足りない場合は、
> 左側が 0 で埋められる。デフォルトの精度は 1 である。

ということですので、#2でTacosan さんが書かれているとおり
質問にある事例では違いが出ないということになります。
    • good
    • 0

#1さんを補足すると


実行結果:
format=%2d :
3 ←3の前には半角スペースが在ります。
(htmlでは半角スペースは今回のように詰めて表示されてしまうケースがあるのでperl≒htmlを出力するものと考えると
%02dの出番はあっても%2dの出番はあまりありませんね。)
15
100
format=%02d :
03
15
100
    • good
    • 0

数値の桁数がフィールドの桁数より小さいときに


なにで埋めるかが変わります。

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の違いをお聞きしたかったのですが、
.が見えにくかったようです。

補足日時:2007/04/19 12:43
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!