如何将包含美元值的字符串以"$39,900"
的格式转换为整数,以便我可以使用它进行计算?如何将包含美元金额的字符串转换为整数?
我想我会尝试gsub
,但似乎并没有工作:
str = "$39,900"
str.strip.gsub('$' '')
=> #<Enumerator: "$39,900":gsub("$")>
可有人请与我分享正确的方式去吗?
如何将包含美元值的字符串以"$39,900"
的格式转换为整数,以便我可以使用它进行计算?如何将包含美元金额的字符串转换为整数?
我想我会尝试gsub
,但似乎并没有工作:
str = "$39,900"
str.strip.gsub('$' '')
=> #<Enumerator: "$39,900":gsub("$")>
可有人请与我分享正确的方式去吗?
我会使用:
str = "$39,900"
str.tr('^0-9', '').to_i # => 39900
下面是它的分解:
str # => "$39,900"
.tr('^0-9', '') # => "39900"
.to_i # => 39900
'^0-9', ''
在tr
的意思是“代替一切那与''
不是0..9,只能得到数字。
tr
速度非常快,比这个用途的gsub
快得多,并且非常值得了解和使用这类问题。
如果使用gsub
用正则表达式坚持,这将做到这一点:
str.gsub(/\D+/, '').to_i # => 39900
不过我还是建议使用tr
。原因如下:
require 'fruity'
str = "$39,900"
compare do
_gsub { str.gsub(/\D+/, '') }
_tr { str.tr('^0-9', '') }
jason_yost { str.scan(/\d/).join('') }
nikita_mishain { str.tr('$,', '') }
ruben_tf { str.gsub(/[^\d]/, '') }
end
# >> Running each test 8192 times. Test will take about 2 seconds.
# >> nikita_mishain is similar to _tr
# >> _tr is faster than ruben_tf by 4x ± 1.0
# >> ruben_tf is similar to _gsub
# >> _gsub is faster than jason_yost by 2x ± 0.1
str.tr('$,', '').to_i
应该工作
我用#tr
这里。它是如何工作的documentation
是最好的解释是正规表达式版本是:
str.gsub(/[^\d]/, '').to_i
凡[^\d]
代表“每次这不是一个数字字符”。
你也可以用'/ \ D /'来匹配非数字。可能应该担心美分:耸耸肩: –
str = "$39,900"
str.scan(/\d/).join('').to_i
=> 39900
如果字符串不包含的数字。这将返回0
str = "test"
str.scan(/\d/).join('').to_i
=> 0
这将不能正确处理小数。如果你需要得到一个浮点值,你可以使用
str = '%.2f' % '$39,000.99'.delete("$").delete(',')
str.to_f
=> 39000.99
请始终尝试询问*特定*问题并提供最少量的代码,以便重现您的问题并找到解决方案。事实上,你的字符串来自网站有**没有任何**你要问的问题,包括刮的页面的整个输出不可能有任何用处。 – meagar
这不是一个Nokogiri问题。 –