2012-07-13 69 views

回答

163

這個怎麼樣?

"1,112".delete(',').to_i 
+0

感謝您的回答。這比我的好多了。實際上,我希望有一個電話而不是兩個電話。如:「1,112」.to_money。在回顧了答案之後,很可能沒有這樣的方法。無論如何,非常感謝! – mCY 2012-07-16 08:55:39

+0

@michealKohi你能告訴我爲什麼delete()比在接受正則表達式的gsub中做得更快,我一直認爲正則表達式的速度更快。我對Benchmark的執行時間有很大的區別。 – Abhinay 2014-08-29 11:15:51

+1

@Abhinay關於你的基準測試:樣本量?字符串大小? – 2014-09-19 18:36:12

4

更方便一些

"1,1200.00".gsub(/[^0-9]/,'') 

它使 「1 200 200」 正常工作藏漢

+8

更好的是''1,1200.00'.gsub(/ [^ 0-9 \。] /,'')。to_f'。 – Hauleth 2012-07-13 08:49:55

+7

等等,你爲什麼要將''1,1200.00'''轉換爲'「1120000」'?你不是隻想替換','(或者,取決於語言環境,'.')嗎?此外,這不會將其轉換爲整數或浮點數,只是不帶分隔符的字符串。 – brymck 2012-07-13 08:53:57

+3

@Bryan:爲了冒險猜測,您可能希望在銀行應用程序中執行此操作,以便在轉換用戶輸入的貨幣金額時僅處理應用程序內部的整數:例如,將美元和美分轉換爲美分。此方法將避免處理浮點數時可能突然出現的任何舍入錯誤。當需要向用戶顯示貨幣金額時,分數可以轉換爲美元和美分。 (雖然這不是提問者詢問的問題。) – 2013-08-06 13:35:34

1

我會做使用String#tr

"1,112".tr(',','').to_i # => 1112 
5

您也可能希望確保您的代碼本地化正確,或確保用戶習慣於「國際」符號。例如,「1,112」實際上是指不同國家的不同號碼。在德國,這意味着這個數字超過了一個,而不是一千個。

對應的維基百科文章是http://en.wikipedia.org/wiki/Decimal_mark。但是,這一次似乎寫得不好。例如,作爲一箇中國人,我不確定這些關於中國千分離器的描述來自何處。

1

以下是另一種可以工作的方法,雖然與其他一些方法一樣,它會去掉小數位。

a = 1,112 
b = a.scan(/\d+/).join().to_i => 1112 
0

如果有人尋找到超過一個逗號SUB OUT,我的粉絲:

"1,200".chars.grep(/\d/).join.to_i 

說不上有關性能,但是,它比gsub更加靈活,即:

"1-200".chars.grep(/\d/).join.to_i 
相關問題