2009-08-09 3 views

Antwort

30

io: Format ("~ 4..0B ~ n", [Num]).

12

string:right(integer_to_list(4), 4, $0).

35

ein bisschen Erklärung zu Zed Antwort und fügte hinzu:

Erlang Format specification ist: ~ F.P.PadModC.

"~4..0B~n" übersetzt:

~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) 

und ~n neue Linie ist.

+0

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. –

+0

@CoralDoe Es ist nicht möglich, Kommentare zu Antworten so zu formatieren, wie es in der Erklärungsantwort geschieht. – Stas

2

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.)