Ruby on Rails:10未満の場合、数値の前にゼロを追加するにはどうすればよいですか?


110

私は次のように1桁の数字を2桁の数字に変換したいと考えています。

9 ==> 09
5 ==> 05
12 == 12
4 ==> 04

私はif-elseステートメントをたくさん置くことができると思います(数値が10未満の場合はgsubを実行します)が、それは恐ろしいコーディングです。Railsにnumber_with_precisionがあることは知っていますが、10進数にのみ適用されることがわかります。1桁を2桁に変換する方法に関するアイデアはありますか?

回答:


142

もしかしてsprintf '%02d', n

irb(main):003:0> sprintf '%02d', 1
=> "01"
irb(main):004:0> sprintf '%02d', 10
=> "10"

将来的にはフォーマットテーブルsprintfを参照する必要があるかもしれませんが、この特定の例で'%02d'd、少なくとも2文字(2)の整数()を出力し、スペース(0)の代わりにゼロで左パディングします。


マークありがとうございます!完璧=)ありがとうございます!
sjsc 2010

%02i出力が整数であることが想定されているため、この場合はおそらく使用する必要があります。dは、の使用に慣れていない人にとっては直感的ではありませんsprintf
SeanJA 2010

'%02d'%1sprintf がなくても簡単にできる
Qiushi Huang

194

多くの人がこれを使用していますsprintf(これは正しいことです)。これを文字列に対して実行したい場合はrjustljustメソッドとメソッドに留意するのが最善だと思います。

"4".rjust(2, '0')

これ"4"により、少なくとも2文字の長さが確保され、が埋め込まれることにより、右揃えになり'0'ます。ljust反対を行います。


2
これは、文字列を許可する場合にのみ、sprintfよりも優れています。それ以外の場合は、誤って文字列を使用すると例外がスローされるので(本来のように)sprintfを使用します。
Velizar Hristov

数値の文字列表現から始めていることがわかっている場合は、sprintfよりパフォーマンスが優れています。を使用するとrjust、sprintfのフォーマット文字列を解析し、文字列を数値に変換し、その数値を文字列に戻すコストを回避できます。さらに、コードが何をしようとしているのかをひと目で理解するのは、(おそらく)人間にとって簡単です。
David Hempy


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.