web-dev-qa-db-ja.com

Ruby on Rails:数値が10未満の場合、数値の前にゼロを追加するにはどうしますか?

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

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

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

104
sjsc

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

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

将来的には sprintfのフォーマットテーブル を参照したいかもしれませんが、この特定の例では'%02d'は、少なくとも2文字を占める整数(d)を出力することを意味します(2)およびスペースの代わりにゼロを使用した左詰め(0)。

137
Mark Rushakoff

多くの人がsprintf(これは正しいことです)を使用しています。これを行うには、文字列の場合rjustおよびljustメソッド:

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

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

187
Ryan Bigg
36
ax.

これを試してください、それは動作するはずです:

abc= 5
puts "%.2i" %abc   >> 05


abc= 5.0
puts "%.2f" %abc   >> 5.00
8
Salil

Rails 5.2.2

ここで説明されているように、 https://api.rubyonrails.org/classes/ActionView/Helpers/NumberHelper.html では、ライブラリメソッドを使用できます。

number_with_precision(123, precision: 2) // 123.00
0
dimpiax