カンマを含む文字列を整数に変換します


95

"1,112"を1ではなく整数1112に変換するきちんとした方法はありますか?

私はそれを持っていますが、きちんとではありません:

"1,112".split(',').join.to_i #=> 1112

回答:


175

これはどう?

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

ご回答有難うございます。それは私のものよりはるかに優れています。実際、私は2つではなく1つの呼び出しがあることを望んでいました。例:「1,112」.to_money。回答を確認した後、そのような方法はない可能性があります。とにかく、どうもありがとう!
mCY 2012

@michealKohiは、正規表現を受け入れるgsubで同じことを行うよりもdelete()の方がはるかに高速である理由を教えてくれます。正規表現の方が速いと常に思っていました。実行時間の大きな違いについて、両方でベンチマークを実行しました。
Abhinay 2014

1
@Abhinayあなたのベンチマークについて:サンプルサイズ?文字列サイズ?
Michael Kohl 2014

5

また、コードが正しくローカライズされていることを確認したり、ユーザーが「国際的な」表記に慣れていることを確認したりすることもできます。たとえば、「1,112」は実際には国によって異なる数字を意味します。ドイツでは、1,000などではなく、1を少し超える数を意味します。

対応するWikipediaの記事はhttp://en.wikipedia.org/wiki/Decimal_markにあります。しかし、現時点では不十分に書かれているようです。たとえば、中国人として、私はこれらの中国の1000の区切り記号に関する説明がどこから来たのかわかりません。


4

もっと便利

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

「1 200 200」も適切に機能します


8
さらに良いです'1,1200.00'.gsub(/[^0-9\.]/,'').to_f
Hauleth 2012

7
待って、なぜあなたはに変換"1,1200.00"したい"1120000"ですか?,(または、ロケールによっては.)を単に置き換えたくないですか?また、これは整数や浮動小数点数に変換するのではなく、区切り文字のない文字列に変換します。
brymck 2012

3
@ブライアン:ユーザーが入力した通貨の金額を変換するときに、アプリケーション内の整数のみを処理するために、たとえば、ドルやセントをセントに変換するなど、銀行アプリケーションでこれを行うことができます。 。このメソッドは、浮動小数点数を処理するときに予期せず発生する可能性のある丸め誤差を回避します。通貨の金額をユーザーに表示する必要がある場合、セントの金額をドルとセントに変換できます。(それは質問者が尋ねたものではありませんが。)
Teemu Leisti 2013

2
この答えは、文字列を整数または浮動小数点数に変換するという要求者の要求にも対応していません。
LS

2

他のいくつかの方法と同様に、小数点以下を削除しますが、次の方法も機能します。

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


1

誰かがコンマ以上のサブアウトを探しているなら、私はのファンです:

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

パフォーマンスについては知らないが、それはaよりも柔軟であるgsub

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.