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


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

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

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

6 ответов:

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

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

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

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

несколько удобнее

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

это делает" 1 200 200 " работать должным образом, а также

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

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

Я бы сделал с помощью String#tr:

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

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

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

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

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