Ruby Kata整数转换故障排除

时间:2014-06-05 19:09:20

标签: ruby

我正在解决这个红宝石卡塔。基本上代码的作用是输出一个五位数的整数。 示例:

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。有什么想法吗?

2 个答案:

答案 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"