正如你在红宝石知道,你可以做怎么办数字符串后缀
"%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