2016-12-15 55 views
-1

如何將包含美元值的字符串以"$39,900"的格式轉換爲整數,以便我可以使用它進行計算?如何將包含美元金額的字符串轉換爲整數?

我想我會嘗試gsub,但似乎並沒有工作:

str = "$39,900" 
str.strip.gsub('$' '') 
=> #<Enumerator: "$39,900":gsub("$")> 

可有人請與我分享正確的方式去嗎?

+1

請始終嘗試詢問*特定*問題並提供最少量的代碼,以便重現您的問題並找到解決方案。事實上,你的字符串來自網站有**沒有任何**你要問的問題,包括刮的頁面的整個輸出不可能有任何用處。 – meagar

+0

這不是一個Nokogiri問題。 –

回答

1

我會使用:

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 
1

.gsub('$' '') - >.gsub('$', '')(缺少一個逗號)

+0

我該如何做一個同時代替'$'和','的多重gsub? – pjw23

+0

你可以鏈接兩個gsub子句,或者你可以使用正則表達式。 – Bek

1

str.tr('$,', '').to_i應該工作

我用#tr這裏。它是如何工作的documentation

1

是最好的解釋是正規表達式版本是:

str.gsub(/[^\d]/, '').to_i 

[^\d]代表「每次這不是一個數字字符」。

+0

你也可以用'/ \ D /'來匹配非數字。可能應該擔心美分:聳聳肩: –

0
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 
相關問題