Есть ли какой-нибудь изящный способ преобразовать «1,112» в целое число 1112 вместо 1?
Есть один, но не аккуратный:
"1,112".split(',').join.to_i #=> 1112
Ответы:
Как насчет этого?
"1,112".delete(',').to_i
Вы также можете убедиться, что ваш код правильно локализован, или убедитесь, что пользователи привыкли к «международной» нотации. Например, «1,112» на самом деле означает разные числа в разных странах. В Германии это означает число чуть больше единицы вместо тысячи и чего-то такого.
Соответствующая статья в Википедии находится по адресу http://en.wikipedia.org/wiki/Decimal_mark . Хотя в настоящее время это, похоже, написано плохо. Например, как китаец, я не уверен, откуда взялось это описание тысячного сепаратора в Китае.
Несколько удобнее
"1,1200.00".gsub(/[^0-9]/,'')
это заставляет "1 200 200" нормально работать
'1,1200.00'.gsub(/[^0-9\.]/,'').to_f
.
"1,1200.00"
в "1120000"
? Разве вы не хотите просто заменить ,
(или, в зависимости от локали, .
)? Кроме того, это не преобразует его в целое число или число с плавающей запятой, а только в строку без разделителей.
Я бы использовал String#tr
:
"1,112".tr(',','').to_i # => 1112
String count = count.replace(",", "");