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

95

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

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

"1,112".split(',').join.to_i #=> 1112
mCY
источник

Ответы:

175

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

 "1,112".delete(',').to_i
Майкл Коль
источник
Спасибо за Ваш ответ. Он намного лучше моего. На самом деле я надеялся, что будет один звонок вместо двух. например: "1,112" .to_money. Изучив ответы, похоже, что такого метода нет. В любом случае, большое спасибо!
mCY
@michealKohi, можете ли вы сказать мне, почему delete () намного быстрее, чем делать то же самое в gsub, который принимает регулярное выражение, я всегда думал, что способ регулярного выражения быстрее. Я запускал Benchmark на обоих из-за огромной разницы во времени выполнения.
Abhinay
1
@Abhinay По поводу ваших ориентиров: размер выборки? Размер строки?
Майкл Коль
5

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

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

Йи Ян
источник
4

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

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

это заставляет "1 200 200" нормально работать

Алексей Новиков
источник
8
Даже лучше '1,1200.00'.gsub(/[^0-9\.]/,'').to_f.
Hauleth
7
Подождите, а зачем вам конвертировать "1,1200.00"в "1120000"? Разве вы не хотите просто заменить ,(или, в зависимости от локали, .)? Кроме того, это не преобразует его в целое число или число с плавающей запятой, а только в строку без разделителей.
brymck
3
@Bryan: Рискну предположить, что вы можете сделать это в банковском приложении при преобразовании введенной пользователем суммы валюты, чтобы иметь дело только с целыми числами внутри приложения: например, преобразование долларов и центов в центы . Этот метод позволит избежать ошибок округления, которые могут неожиданно возникнуть при работе с числами с плавающей запятой. Когда пользователю необходимо показать сумму в валюте, ее можно конвертировать в доллары и центы. (Хотя спрашивающий спрашивал не об этом.)
Теему Лейсти, 06
2
Этот ответ даже не относится к запросу спрашивающего о преобразовании строки в целое число или число с плавающей запятой.
LS
2

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

a = 1,112
b = a.scan(/\d+/).join().to_i => 1112
Махеш
источник
1

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

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

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

"1-200".chars.grep(/\d/).join.to_i
davidpm4
источник
0
String count = count.replace(",", "");
Аджай Ратор
источник