字符串到整数显式转换

时间:2015-12-06 11:31:57

标签: ruby

我有以下代码:

gets().to_i

当我输入"A""a""world"或其他内容并使用to_i将其转换为整数时,我会返回0。任何人都可以解释这里发生了什么,为什么我总是看到0

3 个答案:

答案 0 :(得分:2)

那是因为转换为整数的字符串会返回0,如果字符串以数字开头,则返回整数。

➜  ~  irb
2.1.5 :001 > "whatever".to_i
 => 0
2.1.5 :002 > "12-whatever".to_i
 => 12
2.1.5 :003 > "whatever-12".to_i
 => 0

当您尝试将Aaworld转换为整数(没有意义)时,您将获得0

在尝试将输入转换为整数之前,应检查输入是否为整数。您可以使用正则表达式,也可以使用Integer方法,如果输入不是整数,则会引发该方法。

2.1.5 :004 > Integer(12)
 => 12
2.1.5 :005 > Integer("world")
ArgumentError: invalid value for Integer(): "world"
    from (irb):5:in `Integer'
    from (irb):5
    from /Users/weppos/.rvm/rubies/ruby-2.1.5/bin/irb:11:in `<main>'
2.1.5 :006 > Integer("12-world")
ArgumentError: invalid value for Integer(): "12-world"
    from (irb):6:in `Integer'
    from (irb):6
    from /Users/weppos/.rvm/rubies/ruby-2.1.5/bin/irb:11:in `<main>'

答案 1 :(得分:1)

关于此的official documentation写得很好。

答案 2 :(得分:0)

实际上,你所描述的内容无法复制。在您提供的所有特定示例中,String#to_i确实返回0,但这并不意味着它会为任何字符串返回0。首先,to_i查看字符串的开头是否可以解释为整数。如果是,则返回该整数。如果没有,则返回0