2009-08-09 4 views

Trả lời

30

io: định dạng ("~ 4..0B ~ n", [Num]).

12

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

35

thêm một chút giải thích câu trả lời của Zed:

Erlang Format specification là: ~ F.P.PadModC.

"~4..0B~n" dịch để:

~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 là dòng mới.

+0

Bạn có thể thêm lời giải thích cho câu trả lời đó thay vì thêm một câu trả lời khác. Điều này sẽ giúp cải thiện câu hỏi đó và giúp đỡ người khác nhiều hơn. –

+0

@CoralDoe không thể định dạng nhận xét cho câu trả lời theo cách được thực hiện trong câu trả lời giải thích. – Stas

2

Vấn đề với io:format là nếu số nguyên của bạn không phù hợp, bạn sẽ có dấu hoa thị:

> io:format("~4..0B~n", [1234]). 
1234 
> io:format("~4..0B~n", [12345]). 
**** 

Vấn đề với string:right là nó ném đi những nhân vật không phù hợp:

> string:right(integer_to_list(1234), 4, $0). 
"1234" 
> string:right(integer_to_list(12345), 4, $0). 
"2345" 

Tôi chưa tìm thấy mô-đun thư viện hoạt động như tôi mong đợi (ví dụ: in số của tôi ngay cả khi nó không vừa với đệm), vì vậy tôi đã viết chức năng định dạng của riêng mình:

%%------------------------------------------------------------------------------ 
%% @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]. 

(Bạn có thể sử dụng iolist_to_binary/1 để chuyển đổi kết quả nhị phân, hoặc bạn có thể sử dụng lists:flatten (io_lib:format ("~ s", [Kết quả])) để chuyển đổi nó vào một danh sách.)