由于没有特别的原因,我试图在Integer类中添加#reverse方法:
class Integer
def reverse
self.to_s.reverse.to_i
end
end
puts 1337.reverse # => 7331
puts 1000.reverse # => 1
除了以0
结尾的数字之外,此工作正常,如1000.reverse
返回1
而不是0001
时所示。在将字符串转换为整数时,有没有办法保持前导零?
答案 0 :(得分:3)
简短回答:不,你不能。
2.1.5 :001 > 0001
=> 1
0001对整数来说根本没有意义。在整数世界中,0001完全为1。
此外,前导整数的数量通常是无关紧要的,除非您需要填充一些整数进行显示,但在这种情况下,您可能将其转换为另一种对象(例如String)。
如果您想将整数保持为Fixnum
,则无法添加前导零。
真正的问题是:为什么你想要/需要领先的零?您没有在问题中提供此类信息。可能有更好的方法来实现您的结果(例如,如果目标是正确格式化显示结果,则将值包装到装饰器对象中。)
答案 1 :(得分:1)
rjust
是否适合您?
1000.to_s.reverse.to_i.to_s.rjust(1000.to_s.size,'0') #=> "0001"
答案 2 :(得分:0)
self.to_s.to_i
会将整数转换为字符串,并将此字符串“0001”转换为整数值。由于普通数字不需要前导零,因此它们被丢弃。换句话说:保持前导零对计算没有意义,因此它们被删除。只要问问自己,如果保留前导零,整数1
将是什么样子,因为它代表一个32位数字。如果您需要前导零,则无法绕过字符串。
但是10 + "0001".to_i
返回11
,因此您可能需要覆盖String类的+
方法。