Мне нужно наложить вывод целого числа на заданную длину.
Например, с длиной 4 цифры вывод целого числа 4 равен "0004" вместо "4". Как я могу сделать это в Erlang?
Мне нужно наложить вывод целого числа на заданную длину.
Например, с длиной 4 цифры вывод целого числа 4 равен "0004" вместо "4". Как я могу сделать это в Erlang?
добавив немного объяснения в ответ Zed:
Спецификация формата Erlang: ~ F.P.PadModC.
"~4..0B~n"
переводит на:
~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)
и ~n
- новая строка.
io: format ( "~ 4..0B ~ n", [Num]).
string:right(integer_to_list(4), 4, $0).
Проблема с io: format заключается в том, что если ваше целое не подходит, вы получаете звездочки:
> io:format("~4..0B~n", [1234]).
1234
> io:format("~4..0B~n", [12345]).
****
Проблема с string: right заключается в том, что она выбрасывает символы, которые не подходят:
> string:right(integer_to_list(1234), 4, $0).
"1234"
> string:right(integer_to_list(12345), 4, $0).
"2345"
Я не нашел библиотечный модуль, который ведет себя так, как я ожидал (т.е. печатает мой номер, даже если он не вписывается в дополнение), поэтому я написал свою собственную функцию форматирования:
%%------------------------------------------------------------------------------
%% @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].
(Вы можете использовать iolist_to_binary/1, чтобы преобразовать результат в двоичный файл, или вы можете использовать : flatten (io_lib: format ( "~ s", [Result])), чтобы преобразовать его в список.)