2010-04-22 21 views
94

我期待的個位數轉換爲兩個數字像這樣:Ruby on Rails:如果在10以下時,如何在數字前添加零?

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

我想我可以把一堆if-else語句的(如果數字低於10,然後做一個GSUB)但數字是可怕的編碼。我知道Rails有number_with_precision,但我發現它只適用於十進制數字。關於如何將單位數字轉換爲兩位數字的任何想法?

回答

124

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

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

你可能要參考format table for sprintf在未來,但對於這個特殊的例子'%02d'意味着要打印一個整數(d)佔用至少2個字符(2)和左填充用零而不是空格(0)。

+0

謝謝馬克!完美=)謝謝! – sjsc 2010-04-22 17:05:52

+0

對於這種情況,您應該使用'%02i',因爲更明顯的是輸出是並且應該是一個整數,對於不習慣使用'sprintf'的人來說,d不那麼直觀。 – SeanJA 2010-04-23 04:21:07

6

試試這個,它應該工作:

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


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

真棒,正是我在找的東西。是否有任何文檔可用或您是如何瞭解它的? – TheMouseMan 2014-02-06 16:55:31

167

很多使用sprintf(這是做正確的事),我認爲,如果你想爲一個字符串做到這一點這是最好的人要記住的rjustljust方法:

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

這將確保使"4"右對齊它的長度至少2字符的d用'0'填充它。 ljust則相反。

+2

如果你想允許字符串,這隻比sprintf更好。否則,我會使用sprintf,因爲如果我不小心使用了一個字符串,它會拋出一個異常(就像它應該)。 – 2015-01-09 16:23:24

相關問題