Das Problem mit io:format ist, dass, wenn Ihre ganze Zahl nicht passt, Sie Sternchen erhalten:
> io:format("~4..0B~n", [1234]).
1234
> io:format("~4..0B~n", [12345]).
****
Das Problem mit string:right ist, dass es die Zeichen wegwirft, die nicht passen:
> string:right(integer_to_list(1234), 4, $0).
"1234"
> string:right(integer_to_list(12345), 4, $0).
"2345"
Ich habe kein Bibliotheksmodul gefunden, das sich so verhält, wie ich es erwarten würde (dh meine Nummer drucken, selbst wenn es nicht in die Auffüllung passt), also schrieb ich meine eigene Formatierungsfunktion:
%%------------------------------------------------------------------------------
%% @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].
(Sie können iolist_to_binary/1 verwenden Sie das Ergebnis in das Binärformat zu konvertieren, oder Sie können lists:flatten (io_lib:format („~ s“, [Ergebnis])) verwenden, um eine Liste zu konvertieren.)
Sie können Erklärung hinzufügen zu dieser Antwort, anstatt eine weitere Antwort hinzuzufügen. Dies wird helfen, diese Frage zu verbessern und anderen mehr zu helfen. –
@CoralDoe Es ist nicht möglich, Kommentare zu Antworten so zu formatieren, wie es in der Erklärungsantwort geschieht. – Stas