2009-08-09 11 views

Odpowiedz

30

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

12

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

35

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.

+0

Możesz dodać wyjaśnienie do tej odpowiedzi zamiast dodawać inną odpowiedź. Pomoże to ulepszyć to pytanie i pomóc innym. –

+0

@CoralDoe nie można formatować komentarzy do odpowiedzi w taki sam sposób, jak w odpowiedzi na wyjaśnienia. – Stas

2

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

Powiązane problemy