2012-07-16 37 views
5

正如你在紅寶石知道,你可以做怎麼辦數字符串後綴

"%03d" % 5 
#=> "005" 

"%03d" % 55 
#=> "055" 

"%03d" % 555 
#=> "555" 

所以基本上號將有3米的地方

只是想知道,「0」字頭是有可能做數字符串後綴以類似的好方式?

something 5 
#=> 500 

something 55 
#=> 550 

something 555 
# => 555 

回答

7

ljust方法怎麼樣?

"5".ljust(3, "0") 

和一些to_sto_i方法調用,如果你想這樣做,以整數

你能避免串轉換有一點數學像log_10找到一個整數的位數,然後i *= 10**x其中x是你要多0的需要

這樣的:

def something(int, power=3) 
    int * 10**([power - Math.log10(int).to_i - 1, 0].max) 
end 
+0

真的很好,所以你對速度的建議是LOG10解決方案?似乎對我來說比ljust解決方案重一點 – equivalent8 2012-07-16 11:15:00

+0

我做了速度測試,「ljust」解決方案是最快的解決方案https://gist.github.com/3122349(也更清潔:)) – equivalent8 2012-07-16 12:10:48

+0

好吧,你的測試不完全公平int版本,因爲你不測試整數<->字符串轉換。看看這個:https://gist.github.com/3122511 - 贊成log10的顯着差異。 +不得不提及[] .max是每次迭代創建新數組對象時的瓶頸。最大方法可以內聯,更好的性能明顯:) – keymone 2012-07-16 13:02:35

0

如何

def prettify(n) 
    ("%03d" % (n.to_s.reverse.to_i)).to_s.reverse 
    end 

  • 你的電話號碼轉換爲字符串
  • 逆轉它
  • 將其轉換回數字
  • 格式,它
  • 轉換回一個int
  • 再次反轉

維護這段代碼有可能成爲一個挑戰,從現在幾個月了,當然:-)

+0

這是一個解決方案,但更像是,「ljust」由ruby直接提供http://ruby-doc.org/core-1.9.3/String.html#method-i-ljust – equivalent8 2012-07-16 12:09:31