我正在解决这个红宝石卡塔。基本上代码的作用是输出一个五位数的整数。 示例:
5 = 00005
12 = 00012
12345 = 12345
00001234 = 012345
这是我的代码:
def solution(value) #00001204
string_value = value.to_s
if string_value.length <= 5
amount_of_zeros = "0" * (string_value.length - 5).abs
puts "Value is #{amount_of_zeros}" + "#{string_value}"
else
start_of_characters = 5 - string_value.length #-3
puts "Value is " + string_value[-1..start_of_characters]
end
end
在我放置00001204
之前,一切正常。出于某种原因,我得到输出00644
。我尝试使用binding.pry
查看发生了什么,我的号码从一开始就转换为644
。它为什么这样做?文档没有提及任何相关内容。我不知道如何解决这个问题,因为在我的方法的第一行它已经变成644
。有什么想法吗?
答案 0 :(得分:3)
在ruby中,0前缀的数字被解释为八进制。当您将00001204
传递给您的方法时,ruby假设您希望将该数字解释为八进制。 1204 8 = 644 10 。
644.to_s 8
=> "1204"
01204.to_s 10
=> "644"
查看文字的Ruby documentation。
答案 1 :(得分:0)
正如Zajn所说,这是因为它被解释为八进制。
您还可以使用.to_i
强制它为整数。
>> 000000001204
=> 644
>> "000000001204".to_i
=> 1204
如果你只是想输出它,还可以看看%格式的字符串格式,因为它可以清理你的代码很多
>> "%05d" % "000001204".to_i
=> "01204"