将字符串转换为整数

时间:2015-06-22 09:57:47

标签: ruby

由于没有特别的原因,我试图在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时所示。在将字符串转换为整数时,有没有办法保持前导零?

3 个答案:

答案 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类的+方法。