2009-08-09 6 views

Respuesta

30

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

12

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

35

añadiendo un poco de explicación a la respuesta de la zeta:

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

"~4..0B~n" se traduce en:

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

y ~n es nueva línea.

+0

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

+0

@CoralDoe no es posible formatear los comentarios a las respuestas de la manera en que se hace en la explicación de respuesta. – Stas

2

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

Cuestiones relacionadas