現在、この目的のためにすべて米ドルで文字列を取得し、それらを数値に変換できる宝石はありますか?いくつかの例は次のとおりです。
「5500」の例では「5500」.to_iを実行できますが、インポートされるスプレッドシートに一貫性がなく、カンマとドル記号が含まれているものと含まれていないものがあります。 Rubyでこれを全面的に処理する適切な方法はありますか?
money_string.scan(/\d/).join
のようなものを試しましたが、これは問題ないようですが、小数点以下の桁数など、まだ見つけていないEdgeのケースに遭遇するのではないかと心配しています。
.to_i
を呼び出す前に、数字以外の文字をすべて削除してみませんか
例:
"$7,600".gsub(/\D/,'').to_i
浮動小数点数の場合:
"$7,600.90".gsub(/[^\d\.]/, '').to_f
できるよ:
"$100.00".scan(/[.0-9]/).join().to_f
または、ドルのみの場合はto_i
お金 宝石を使用できます
Money.parse("$100") == Money.new(10000, "USD")
Ruby RegEx オブジェクトを使用して、数字以外の文字をトリミングできるはずです。入力をサニタイズして、小数点の左側にある数字以外のものを削除し、次に、数値のみの文字列を数値として解析します。
(CSVバンクではなく実際のスプレッドシートを取得している場合は、画面に表示されているテキストを無視するvalue
プロパティを読み取ることができる可能性があることに注意してください。)
Monetize
gemを使用できます。
pry(main)> Monetize.parse("$7,600").to_i
=> 7600
https://github.com/RubyMoney/monetize
pry(main)> Monetize.parse("$7,600").class
=> Money
def dollar_to_number(dollarPrice)
if dollarPrice
dollarPrice[1, dollarPrice.length].to_i
end
end