to_i 方法不转换字符串
to_i method doesn't convert string
我从一个元素中得到包含总和的文本:
sum = browser.div(:class => 'single sort', :index => 0).div(:class, 'amount').text
然后我必须将sum
与另一个整数进行比较,但sum
仍然是一个字符串:
>> sum = browser.div(:class => 'single sort', :index => 0).div(:class, 'amount').text
=> "7 671 \u0420"
>> puts sum.class
String
>> sum.gsub!(/[^0-9]/, '')
=> "7671"
>> puts sum.class
String
>> sum.to_i
=> 7671
>> puts sum.class
String
如何将 sum
转换为整数?
您仍然需要将新值分配给 sum
:
sum = sum.to_i
您必须以这种方式覆盖结果:
sum = sum.to_i
如果您尝试转换非数字字符串,我建议使用 Integer(sum)
而不是 .to_i
方法来引发异常。
nil.to_i = 0
"".to_i = 0
Integer("")
ArgumentError: invalid value for Integer(): ""
from (irb):1:in `Integer'
from (irb):1
from /Users/nico/.rvm/rubies/ruby-2.2.0/bin/irb:11:in `<main>'
String#to_i
returns 一个新对象(这是唯一明智的实现;想一想如果 String#to_i
神奇地改变对象的 class 会发生什么)。
因此,要将整数值分配给您的 sum
变量,请使用
sum = sum.to_i
或(更好)为您的整数值引入一个新变量:
sum_as_integer = sum.to_i
我从一个元素中得到包含总和的文本:
sum = browser.div(:class => 'single sort', :index => 0).div(:class, 'amount').text
然后我必须将sum
与另一个整数进行比较,但sum
仍然是一个字符串:
>> sum = browser.div(:class => 'single sort', :index => 0).div(:class, 'amount').text
=> "7 671 \u0420"
>> puts sum.class
String
>> sum.gsub!(/[^0-9]/, '')
=> "7671"
>> puts sum.class
String
>> sum.to_i
=> 7671
>> puts sum.class
String
如何将 sum
转换为整数?
您仍然需要将新值分配给 sum
:
sum = sum.to_i
您必须以这种方式覆盖结果:
sum = sum.to_i
如果您尝试转换非数字字符串,我建议使用 Integer(sum)
而不是 .to_i
方法来引发异常。
nil.to_i = 0
"".to_i = 0
Integer("")
ArgumentError: invalid value for Integer(): ""
from (irb):1:in `Integer'
from (irb):1
from /Users/nico/.rvm/rubies/ruby-2.2.0/bin/irb:11:in `<main>'
String#to_i
returns 一个新对象(这是唯一明智的实现;想一想如果 String#to_i
神奇地改变对象的 class 会发生什么)。
因此,要将整数值分配给您的 sum
变量,请使用
sum = sum.to_i
或(更好)为您的整数值引入一个新变量:
sum_as_integer = sum.to_i