Potrzebuję wstawić dane wyjściowe liczby całkowitej na określoną długość.Jak sformatować liczbę z wyściółką w Erlang
Na przykład, o długości 4 cyfr, wynik liczby całkowitej 4 wynosi "0004" zamiast "4". Jak mogę to zrobić w Erlangu?
Potrzebuję wstawić dane wyjściowe liczby całkowitej na określoną długość.Jak sformatować liczbę z wyściółką w Erlang
Na przykład, o długości 4 cyfr, wynik liczby całkowitej 4 wynosi "0004" zamiast "4". Jak mogę to zrobić w Erlangu?
io: format ("~ 4..0B ~ n", [Num]).
string:right(integer_to_list(4), 4, $0).
dodając trochę wyjaśnienia do odpowiedzi Zed za:
Erlang Format specification jest: ~ F.P.PadModC.
"~4..0B~n"
przekłada się:
~F. = ~4. (Field width of 4)
P. = . (no Precision specified)
Pad = 0 (Pad with zeroes)
Mod = (no control sequence Modifier specified)
C = B (Control sequence B = integer in default base 10)
i ~n
jest nowa linia.
Problem z io:format jest to, że jeśli liczba całkowita nie pasuje, można dostać gwiazdki:
> io:format("~4..0B~n", [1234]).
1234
> io:format("~4..0B~n", [12345]).
****
Problem z string:right jest to, że wyrzuca znaki, które nie pasują:
> string:right(integer_to_list(1234), 4, $0).
"1234"
> string:right(integer_to_list(12345), 4, $0).
"2345"
Nie znalazłem modułu biblioteki, który zachowałby się tak, jak bym się spodziewał (np. Wydrukuj mój numer, nawet jeśli nie mieści się w wyściółce), dlatego napisałem własną funkcję formatowania:
%%------------------------------------------------------------------------------
%% @doc Format an integer with a padding of zeroes
%% @end
%%------------------------------------------------------------------------------
-spec format_with_padding(Number :: integer(),
Padding :: integer()) -> iodata().
format_with_padding(Number, Padding) when Number < 0 ->
[$- | format_with_padding(-Number, Padding - 1)];
format_with_padding(Number, Padding) ->
NumberStr = integer_to_list(Number),
ZeroesNeeded = max(Padding - length(NumberStr), 0),
[lists:duplicate(ZeroesNeeded, $0), NumberStr].
(można użyć iolist_to_binary/1 przekonwertować wynik do binarnego, czy można użyć lists:flatten (io_lib:format ("~ S", [Result])), aby przekształcić go do listy.)
Możesz dodać wyjaśnienie do tej odpowiedzi zamiast dodawać inną odpowiedź. Pomoże to ulepszyć to pytanie i pomóc innym. –
@CoralDoe nie można formatować komentarzy do odpowiedzi w taki sam sposób, jak w odpowiedzi na wyjaśnienia. – Stas