Ответ 1
Почему бы не удалить все символы без цифр перед вызовом .to_i
Пример:
"$7,600".gsub(/\D/,'').to_i
И для числа с плавающей запятой:
"$7,600.90".gsub(/[^\d\.]/, '').to_f
Есть ли в настоящее время драгоценный камень, способный брать строки, все в долларах США для этой цели, и преобразовывать их в число? Вот некоторые примеры:
Я знаю, что на примере "5500" я могу просто "5500" .to_i, но импортируемые таблицы несовместимы, а некоторые из них включают запятые и знаки доллара, а другие - нет. Там достойный способ справиться с этим по всем направлениям в Ruby?
Я пробовал что-то вроде money_string.scan(/\d/).join
, которое кажется прекрасным, просто волнуйтесь, я столкнусь с крайними случаями, которые я еще не нашел, такими как десятичные знаки.
Почему бы не удалить все символы без цифр перед вызовом .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 gem
Money.parse("$100") == Money.new(10000, "USD")
Вы можете урезать любые нечисловые символы с помощью объекта Ruby RegEx. Санируйте свои входы, чтобы удалить что-либо, кроме цифр слева от десятичной точки, а затем проанализируйте строку с номерами только как число.
(И обратите внимание, что если вы получаете фактические электронные таблицы вместо кодовой части CSV, возможно, свойство value
, которое вы можете прочитать, игнорируя текст, отображаемый на экране.)
def dollar_to_number(dollarPrice)
if dollarPrice
dollarPrice[1, dollarPrice.length].to_i
end
end
Вы можете использовать Monetize
:
pry(main)> Monetize.parse("$7,600").to_i
=> 7600
https://github.com/RubyMoney/monetize
pry(main)> Monetize.parse("$7,600").class
=> Money