如何將包含美元值的字符串以"$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問題。 –