正如你在紅寶石知道,你可以做怎麼辦數字符串後綴
"%03d" % 5
#=> "005"
"%03d" % 55
#=> "055"
"%03d" % 555
#=> "555"
所以基本上號將有3米的地方
只是想知道,「0」字頭是有可能做數字符串後綴以類似的好方式?
something 5
#=> 500
something 55
#=> 550
something 555
# => 555
正如你在紅寶石知道,你可以做怎麼辦數字符串後綴
"%03d" % 5
#=> "005"
"%03d" % 55
#=> "055"
"%03d" % 555
#=> "555"
所以基本上號將有3米的地方
只是想知道,「0」字頭是有可能做數字符串後綴以類似的好方式?
something 5
#=> 500
something 55
#=> 550
something 555
# => 555
ljust方法怎麼樣?
"5".ljust(3, "0")
和一些to_s
和to_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
如何
def prettify(n)
("%03d" % (n.to_s.reverse.to_i)).to_s.reverse
end
這
維護這段代碼有可能成爲一個挑戰,從現在幾個月了,當然:-)
這是一個解決方案,但更像是,「ljust」由ruby直接提供http://ruby-doc.org/core-1.9.3/String.html#method-i-ljust – equivalent8 2012-07-16 12:09:31
真的很好,所以你對速度的建議是LOG10解決方案?似乎對我來說比ljust解決方案重一點 – equivalent8 2012-07-16 11:15:00
我做了速度測試,「ljust」解決方案是最快的解決方案https://gist.github.com/3122349(也更清潔:)) – equivalent8 2012-07-16 12:10:48
好吧,你的測試不完全公平int版本,因爲你不測試整數<->字符串轉換。看看這個:https://gist.github.com/3122511 - 贊成log10的顯着差異。 +不得不提及[] .max是每次迭代創建新數組對象時的瓶頸。最大方法可以內聯,更好的性能明顯:) – keymone 2012-07-16 13:02:35