Преобразование строки с запятой в целое число

Есть ли какой-либо опрятный метод для преобразования "1,112" в целое число 1112 вместо 1?

У меня есть один, но не аккуратный:

"1,112".split(',').join.to_i #=> 1112

Ответ 1

Как насчет этого?

 "1,112".delete(',').to_i

Ответ 2

Вы также можете убедиться, что ваш код локализуется правильно или убедитесь, что пользователи используются в "международной" нотации. Например, "1,112" фактически означает разные номера в разных странах. В Германии это означает число немногим более одного, а не тысячу и что-то.

Соответствующая статья в Википедии находится в http://en.wikipedia.org/wiki/Decimal_mark. На данный момент это плохо написано. Например, как китайский, я не знаю, откуда взялось это описание о тысячах разделителей в Китае.

Ответ 3

Несколько более удобных

"1,1200.00".gsub(/[^0-9]/,'') 

он делает "1 200 200" правильно работать, а

Ответ 4

Я бы использовал String#tr:

"1,112".tr(',','').to_i # => 1112

Ответ 5

Ниже приведен другой метод, который будет работать, хотя, как и в случае с некоторыми другими методами, он будет разделять десятичные знаки.

a = 1,112
b = a.scan(/\d+/).join().to_i => 1112

Ответ 6

Если кто-то ищет больше, чем запятую, я поклонник:

"1,200".chars.grep(/\d/).join.to_i

dunno о производительности, но он более гибкий, чем gsub, то есть:

"1-200".chars.grep(/\d/).join.to_i