Ruby on Rails:如果数字低于10,如何在数字前添加零?

时间:2010-04-22 16:58:41

标签: ruby-on-rails ruby

我希望将单个数字转换为两位数字,如下所示:

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

我想我可以放一堆if-else语句(如果数字小于10,那么就做一个gsub)但是数字可怕的编码。我知道Rails有number_with_precision但我看到它只适用于十进制数。关于如何将单位数转换为两位数的任何想法?

6 个答案:

答案 0 :(得分:182)

很多人使用sprintf(这是正确的做法),我想如果你想这样做换一个字符串,最好记住{ {1}}和rjust方法:

ljust

通过确保"4".rjust(2, '0') 字符长度至少为"4"个字符并使用2填充它,可以使'0'右对齐。 ljust反其道而行之。

答案 1 :(得分:136)

您的意思是sprintf '%02d', n吗?

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

您可能希望将来引用format table for sprintf,但对于此特定示例,'%02d'表示打印至少占用2个字符的整数(d){{1 }}和左填充用零而不是空格(2)。

答案 2 :(得分:36)

答案 3 :(得分:8)

试试这个,它应该有效:

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


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

答案 4 :(得分:0)

Rails 5.2.2

如此处所述:https://api.rubyonrails.org/classes/ActionView/Helpers/NumberHelper.html,您可以使用库方法:

number_with_precision(123, precision: 2) // 123.00

答案 5 :(得分:0)

Rubocopformatsprintf上推荐%。我认为这更直观:

format('%02d', 7) # => "07"
format('%02d', 12) # => "12"