Вы не можете, потому что класс Ruby Integer
не хранит ведущие нули.
Начальный 0
в числовом литерале интерпретируется как префикс:
0
и 0o
: восьмеричное число
0x
: шестнадцатеричное число
0b
: двоичное число
0d
: десятичное число
Это позволяет вам вводить числа в эти базы. Парсер Ruby преобразует литералы в соответствующие Integer
экземпляры. Префикс или ведущие нули отбрасываются.
Другой пример — %w
для ввода массивов:
ary = %w(foo bar baz)
#=> ["foo", "bar", "baz"]
Невозможно получить %w
от ary
. Синтаксический анализатор превращает литерал в экземпляр массива, поэтому сценарий никогда не видит литерал.
0112
(или 0o112
) интерпретируется (парсером) как восьмеричное число 112 и превращается в целое число 74
.
Десятичное число 0112 — это всего лишь 112
, независимо от того, сколько нулей вы поставили перед ним:
0d0112 #=> 112
0d00112 #=> 112
0d000112 #=> 112
Это похоже на дополнительные конечные нули для чисел с плавающей запятой:
1.0 #=> 1.0
1.00 #=> 1.0
1.000 #=> 1.0
Вероятно, вам придется использовать строку, например "0112"
Другой вариант — явно указать (минимальную) ширину, например:
def descending_order(number, width = 0)
sprintf('%0*d', width, number).reverse.to_i
end
descending_order(123, 4)
#=> 3210
descending_order(123, 10)
#=> 3210000000
person
Stefan
schedule
16.02.2015