nie można, bo Integer
klasy Ruby nie przechowuje zera. prowadząc 0
w liczba dosłownym
A jest interpretowana jako przedrostek:
0
i 0o
: ósemkowa liczba
0x
: numer szesnastkowy
0b
: liczba binarna
0d
: liczba dziesiętna
To pozwala na wprowadzić numery w tych bazach. Analizator składni Ruby konwertuje literały do odpowiednich instancji Integer
. Przedrostek lub początkowe zera są odrzucane.
Innym przykładem jest %w
dla wjeżdżających tablic:
ary = %w(foo bar baz)
#=> ["foo", "bar", "baz"]
Nie ma sposobu, aby ta %w
z ary
. Analizator składni przekształca literał w instancję tablicy, więc skrypt nigdy nie widzi literału.
0112
(lub 0o112
) jest interpretowany (przez analizator składni) jako liczba ósemkowa 112 i przekształcana w liczbę całkowitą 74
.
ułamek dziesiętny 0112 jest po prostu 112
, bez względu na to, ile zer można umieścić z przodu:
0d0112 #=> 112
0d00112 #=> 112
0d000112 #=> 112
To jakby dodatkowych zer dla pływaków:
1.0 #=> 1.0
1.00 #=> 1.0
1.000 #=> 1.0
Prawdopodobnie trzeba używać znaków , czyli "0112"
Inną opcją jest jawne podanie (minimalnej) szerokości, np .:
def descending_order(number, width = 0)
sprintf('%0*d', width, number).reverse.to_i
end
descending_order(123, 4)
#=>
descending_order(123, 10)
#=>000000
To było szybkie i bardzo prawdziwe! – Anthony
@falsetru dzięki za szybką odpowiedź. Jak mogę wziąć to pod uwagę w przypadku metody, która chce odwrócić liczbę, aby była w malejącej kolejności? – Joel
@JoelL, Masz na myśli coś takiego? ''0112'.chars.sort.reverse.join'. Jeśli tak, przekonwertuj liczbę na ciąg znaków w sposób podany w odpowiedzi, następnie 'the_string_object.chars.sort.reverse.join.to_i' – falsetru