【问题标题】:String to integer explicit conversion字符串到整数的显式转换
【发布时间】:2015-12-06 11:31:56
【问题描述】:

我有以下代码:

gets().to_i

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

【问题讨论】:

标签: ruby


【解决方案1】:

这是因为转换为整数的字符串返回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>'

【讨论】:

    【解决方案2】:

    上面的official documentation写得很好。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2017-10-16
        • 2015-08-10
        • 2014-02-20
        • 1970-01-01
        • 1970-01-01
        • 2018-10-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多