From: Koji Arai Date: 2002-12-08T02:36:11+09:00 Subject: [ruby-dev:19032] Re: spec. of format "%.nx" 新井です。 In message "[ruby-dev:18910] Re: spec. of format "%.nx"" on Fri, 22 Nov 2002 14:47:38 +0900, matz@ruby-lang.org (Yukihiro Matsumoto) wrote: > まつもと ゆきひろです > でいいですかね。でも、"%6.4x"とかはどうしましょう。 > > "%6.4x"%-10 #=> ..fff6 > "%10.4x"%-10 #=> ......fff6 > > とでもするんでしょうか。今は > > "%6.4x"%-10 #=> ..fff6 > "%10.4x"%-10 #=> ..fffffff6 > > ですけど。 マニュアル上 精度は整数の指示子 (`d', `i', `b', `o', `x', `X', `u') に対しては、数値列部分の長さを意味します。 っと書いたので、それに従えば前者になるように思います。 じゃあ、 p sprintf("%-.10x", -1) # => ".........f" っとなるのもおかしな気がしますね。(左詰めにすると . が増える というのはどういうことだろう?) p sprintf("%.10x", -1) # => "ffffffffff" p sprintf("%-.10x", -1) # => "ffffffffff" p sprintf("%15.10x", -1) # => ".....ffffffffff" p sprintf("%-15.10x", -1) # => "..ffffffffff " が、定義にそった動作になるでしょうか? "." は常に2つだけとし た方がいいかもしれません、そうすると p sprintf("%15.10x", -1) # => " ..ffffffffff" p sprintf("%-15.10x", -1) # => "..ffffffffff " っとなって定義が単純で良いように思います。 ふと以下はどうなるんだろうと思ったら p sprintf("%05.3d", 1) => ruby 1.6.7 (2002-03-01) [i586-linux] "00001" => ruby 1.7.3 (2002-12-04) [i586-linux] "00001" っとこれはよろしくないようです。printfコマンドでは printf "%05.3d\n" 1 001 っとなります。(表示幅5つ、数値列3つ指定なので空白が2つつく) # printf の仕様を確認せずに書いてます。 -- 新井康司 (Koji Arai)