2011-07-06 17 views
2

私はルビーで先行ゼロを持つ方法を考えていました。解決策を見つけました:use%02d " 今、私はループを行い、このゼロを保ちたいと思います! 私はエラーを持っているこのルビの先行ゼロと増分

i = "%02d" % "1".to_i 
until (i == 10) 
    puts i 
    i += 1 
end 

ような何かを行うと、「文字列にFIXNUMを変換できません」。 は、だから私はこの

i = "%02d" % "1".to_i 
"01" 
until (i == 10) 
    puts i 
    i = i.to_i 
    i += 1 
end 

ので、この時間、ループの作業を行うことにしたが、最初の数字だけが0になります。 私は考えがなくなったので、ちょっとした助けに感謝します!

+2

ルビーでは、通常i + = 1は避けられますが、回答にはそれが含まれていません。 .upto、.times、.each、.each_with_indexはすべてルビコードでより一般的です。 – Beanish

+1

将来コードをインデントするのを忘れないでください。 –

+0

@Beanishよろしくお願いします。 @Andrew Yeap、申し訳ありません。 – Simon

答えて

9

私は、Rubyの開発者ではないんだけど、基本的に私はあなたのような大手0だから、何かi、およびテキスト表現のアイデアを分離する必要があると思います。

for i in (1..10) 
    puts "%02d" % i 
end 

(あなたが他の回答からわかるように、ループ自体を符号化する方法はたくさんあります。)

ここではiは常に数字ですが、表示のためだけに"%02d" % iという形式は2桁の数字としてiと書式設定されています。

+0

ありがとう、ちょうど私が必要なものです!私は2つの事の違いを見て、最初のエラーをよく理解してくれた^^ありがとう! – Simon

+0

ありがとうジョン。あなたは男です。 – Abram

6

実際に出力する準備ができるまで、出力用の文字列に変換しないでください。通常は文字列値を増やさない。

0.upto(10) { |i| puts "%02d" % i } 
+0

Jon Skeetのソリューションはうまく動作します。とにかくありがとうございます:) – Simon

+0

それは素晴らしいですが、あなたのコードが本当にRuby以外のものから利益を得るかどうかを検討したいと思うかもしれません( 'until'を使って繰り返します)。あなたがやっているような変数fixnumを繰り返すことは、より慣用的なネイティブループ(RubyでEnumerableになる)にもっと意味をなさない(上記参照)。 – coreyward

2
10.times do |x| 
    puts "%02d" % x 
end 
関連する問題