Строка Ruby с долларом "деньги", преобразованная в число

Есть ли в настоящее время драгоценный камень, способный брать строки, все в долларах США для этой цели, и преобразовывать их в число? Вот некоторые примеры:

  • "$ 7 600" превратится в 7600
  • "5500" превратится в 5500

Я знаю, что на примере "5500" я могу просто "5500" .to_i, но импортируемые таблицы несовместимы, а некоторые из них включают запятые и знаки доллара, а другие - нет. Там достойный способ справиться с этим по всем направлениям в Ruby?

Я пробовал что-то вроде money_string.scan(/\d/).join, которое кажется прекрасным, просто волнуйтесь, я столкнусь с крайними случаями, которые я еще не нашел, такими как десятичные знаки.

Ответы

Ответ 1

Почему бы не удалить все символы без цифр перед вызовом .to_i

Пример:

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

И для числа с плавающей запятой:

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

Ответ 2

Вы можете сделать:

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

или to_i, если они только доллары

Ответ 3

Вы можете использовать Money gem

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

Ответ 4

Вы можете урезать любые нечисловые символы с помощью объекта Ruby RegEx. Санируйте свои входы, чтобы удалить что-либо, кроме цифр слева от десятичной точки, а затем проанализируйте строку с номерами только как число.

(И обратите внимание, что если вы получаете фактические электронные таблицы вместо кодовой части CSV, возможно, свойство value, которое вы можете прочитать, игнорируя текст, отображаемый на экране.)

Ответ 5

def dollar_to_number(dollarPrice)
  if dollarPrice
    dollarPrice[1, dollarPrice.length].to_i
  end
end

Ответ 6

Вы можете использовать Monetize:

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

https://github.com/RubyMoney/monetize

pry(main)> Monetize.parse("$7,600").class
=> Money