2015-10-27 5 views
0

Я хочу удалить ведущие нули из числа. Я хочу использовать Integer(i) вместо i.to_i, чтобы спасти нуль.Удалить ведущие нули Ruby

"011,12,h,013,14".split(",").map{|i| Integer i rescue nil} 

я хочу получить:

[11,12,nil,13,14] 

вместо я получаю это:

[9, 12, nil, 11, 14] 

Что может быть проблема?

+2

строки цифр, начиная с нуль по умолчанию интерпретируется как восьмеричные числа. См. Также http://wordaligned.org/articles/octal-literals –

+2

Невозможно выбрать ответ. Я предлагаю, чтобы в будущем вы считаете, что вы ожидаете, по крайней мере, пару часов; многие здесь ждут несколько часов, а иногда и целый день. (Иногда никогда, конечно.) Быстрый выбор может отбить другие ответы, и imo не учитывает тех, кто все еще работает над ответами. –

+0

Да, cary, я буду делать это в будущих вопросах. (Новый пользователь здесь) – owade

ответ

7

От documentation of Kernel#Integer:

Integer (ARG, база = 0) → целое

[...] Если arg - String, когда основание опущено или равно нулю, показатели счисления (0, 0b и 0x) выполнены. [...]

Вы опуская базу так ведущий 0 в ваших строках означает базовый 8 (или octal) используется преобразование в целых числах. Integer literals работает так же (011 == 9 дает true). Если эти префиксы/индикаторы Radix не должны быть выполнены и целые числа, представленные строки должны рассматриваться как базовая-10 (или decimal) один, передают 10 для базы:

"011,12,h,013,14".split(",").map{|i| Integer(i, 10) rescue nil} # => [11, 12, nil, 13, 14] 
+0

Хороший ответ. Я не знал, что «Integer» принимает второй аргумент. Я предложил @Dirk после того, как ваш ответ, похоже, был удален по какой-то причине. (Возможно, у меня была устаревшая веб-страница.) –

3
Integer('011') 
=> 9 

вы можете использовать to_i метод

"011,12,h,013,14".split(",").map{|i| i.to_i rescue nil} 
=> [11, 12, 0, 13, 14] 

"011,12,h,013,14".split(",").map{|i| i.to_i == 0 ? nil : i.to_i} 
[11, 12, nil, 13, 14] 

"0,011,12,h,013,14".split(",").map{|i| (i =~ /\D/).nil? ? i.to_i : nil } 
[0, 11, 12, nil, 13, 14] 
+0

Я хочу, чтобы нуль возвращался вместо нуля. – owade

+0

Да, это то, что я хотел. Спасибо – owade

+0

@owade Я думаю, что ответ кремно лучше. – pangpang

Смежные вопросы