2016-02-09 6 views
1

Я получаю входные данные в файле с европейскими разделителями и разделителями для числовых данных, поэтому, например, я получаю 123.456,78 (где американец будет писать 123 456,78)Как разобрать номер в ruby ​​с разделителем запятой, разделителем и разделителем периодов

Есть ли стандартный способ Ruby (not Rails) для синтаксического анализа этих чисел? Конечно, я мог бы выполнять замену строк, но это кажется неуклюжим.

+0

Что такое ваш желаемый результат? У вас есть как ситуации, так и европейский стиль? – Nermin

+0

У меня есть две ситуации. Некоторые входные файлы отформатированы в европейском стиле, в некотором американском стиле, но я заранее знаю, с каким стилем я сталкиваюсь. – Leonard

ответ

1

Вы можете использовать драгоценный камень money.

"123.456,78".to_money 
#=> #<Money fractional:12345678 currency:USD> 
"123,456.78".to_money 
#=> #<Money fractional:12345678 currency:USD> 
"123,456.78".to_money.to_s 
#=> "123456.78" 

Не знаю, если это удобный способ с точки зрения ваших целей, но это хороший инструмент, когда речь идет о разборе строки «деньги».

+0

они извлекли это в драгоценный камень Monetize https://github.com/RubyMoney/monetize – mountriv99

-1

Предполагая, что ваш вклад всегда хорошо сформирован и имеет 2 знака после запятой, то это будет достаточно:

"123.456,78".gsub(/[,.]/,'').to_i/100.0 
# => 123456.78 
Смежные вопросы