2015-12-06 26 views
2

我有以下一段代碼:字符串到整數的顯式轉換

gets().to_i 

當我輸入"A""a""world",或任何東西,將其轉換爲使用to_i整數,我得到0返回。任何人都可以解釋這裏發生了什麼,爲什麼我總是看到0

+0

我想你會在這裏找到你的答案:http://stackoverflow.com/questions/8768865/regarding-to-i-method-of-ruby – Technotronic

回答

0

實際上,你描述的內容不能被複制。在您給出的所有特定示例中,String#to_i的確返回0,但這並不意味着它會爲任何字符串返回0。首先,to_i看看字符串的開頭是否可以解釋爲一個整數。如果是這樣,它會返回該整數。如果不是,則返回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>'