如何将包含美元形式的字符串"$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', ''
intr
表示“将非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
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句