web-dev-qa-db-ja.com

Ruby米ドルの「お金」が数値に変換された文字列

現在、この目的のためにすべて米ドルで文字列を取得し、それらを数値に変換できる宝石はありますか?いくつかの例は次のとおりです。

  • 「$ 7,600」は7600になります
  • 「5500」は5500になります

「5500」の例では「5500」.to_iを実行できますが、インポートされるスプレッドシートに一貫性がなく、カンマとドル記号が含まれているものと含まれていないものがあります。 Rubyでこれを全面的に処理する適切な方法はありますか?

money_string.scan(/\d/).joinのようなものを試しましたが、これは問題ないようですが、小数点以下の桁数など、まだ見つけていないEdgeのケースに遭遇するのではないかと心配しています。

23
randombits

.to_iを呼び出す前に、数字以外の文字をすべて削除してみませんか

例:

"$7,600".gsub(/\D/,'').to_i

浮動小数点数の場合:

"$7,600.90".gsub(/[^\d\.]/, '').to_f
41
naikipl

できるよ:

"$100.00".scan(/[.0-9]/).join().to_f

または、ドルのみの場合はto_i

11
Lenny

お金 宝石を使用できます

Money.parse("$100") == Money.new(10000, "USD")
7
JosephL

Ruby RegEx オブジェクトを使用して、数字以外の文字をトリミングできるはずです。入力をサニタイズして、小数点の左側にある数字以外のものを削除し、次に、数値のみの文字列を数値として解析します。

(CSVバンクではなく実際のスプレッドシートを取得している場合は、画面に表示されているテキストを無視するvalueプロパティを読み取ることができる可能性があることに注意してください。)

0
DougM

Monetizegemを使用できます。

pry(main)> Monetize.parse("$7,600").to_i
=> 7600

https://github.com/RubyMoney/monetize

pry(main)> Monetize.parse("$7,600").class
=> Money
0
NM Pennypacker
def dollar_to_number(dollarPrice)
  if dollarPrice
    dollarPrice[1, dollarPrice.length].to_i
  end
end
0
Vibhuti