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


110

我正在寻找这样将一位数字转换为两位数字的方法:

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

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

Answers:


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

%02i在这种情况下,您可能应该使用它,因为更明显的是,输出是并且应该是整数,对于不习惯使用的人来说,d不太直观sprintf
SeanJA

您可以完全'%02d'%1不用sprintf
Qiushi Huang,

194

很多人正在使用sprintf(这是正确的做法),我认为如果要对字符串执行此操作最好记住rjustand ljust方法:

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

"4"通过确保2长度至少为字符并用填充,将使权利具有合理性'0'ljust相反。


2
如果要允许字符串,这仅比sprintf好。否则,我将使用sprintf,因为如果我不小心使用了字符串,它会抛出一个异常(应该这样)。
Velizar Hristov 2015年

如果您知道您是以数字的字符串表示形式开头的,那么在性能方面,我比sprintf更好。使用rjust避免了解析sprintf的格式字符串,将字符串转换为数字并将该数字转换回字符串的开销。另外,人们可以一目了然地(很容易地)理解代码正在尝试做什么。
David Hempy


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.