El problema con io:format es que si su número entero no encaja, se obtiene asteriscos:
> io:format("~4..0B~n", [1234]).
1234
> io:format("~4..0B~n", [12345]).
****
El problema con string:right es que se tira a la basura los personajes que no encajan:
> string:right(integer_to_list(1234), 4, $0).
"1234"
> string:right(integer_to_list(12345), 4, $0).
"2345"
No he encontrado un módulo de biblioteca que se comporte como podría esperar (es decir, imprimir mi número aunque no encaje en el relleno), así que escribí mi propia función de formateo:
%%------------------------------------------------------------------------------
%% @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].
(Puede utilizar iolist_to_binary/1 para convertir el resultado a binario, o puede utilizar lists:flatten (io_lib:format ("~" s, [Resultados])) para convertirlo en una lista.)
Puede añadir explicación a esa respuesta en lugar de agregar otra respuesta. Esto ayudará a mejorar esa pregunta y ayudará a otros más. –
@CoralDoe no es posible formatear los comentarios a las respuestas de la manera en que se hace en la explicación de respuesta. – Stas