Formatting 如何在Erlang中使用填充设置数字格式

Formatting 如何在Erlang中使用填充设置数字格式,formatting,erlang,Formatting,Erlang,我需要将整数的输出填充到给定的长度 例如,长度为4位的整数4的输出是“0004”,而不是“4”。如何在Erlang中实现这一点?io:format(“~4..0B~n”和[Num])。string:right(整数到列表(4),4,$0)。为Zed的答案添加一些解释: 是:~F.p.PadModC “~4..0B~n”翻译为: ~F. = ~4. (Field width of 4) P. = . (no Precision specified) Pad = 0 (Pad

我需要将整数的输出填充到给定的长度


例如,长度为4位的整数4的输出是“0004”,而不是“4”。如何在Erlang中实现这一点?

io:format(“~4..0B~n”和[Num])。

string:right(整数到列表(4),4,$0)。
为Zed的答案添加一些解释:

是:~F.p.PadModC

“~4..0B~n”
翻译为:

 ~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
是新行。

的问题是,如果整数不合适,就会得到星号:

> io:format("~4..0B~n", [1234]).
1234
> io:format("~4..0B~n", [12345]).
****
问题是它会丢弃不适合的字符:

> string:right(integer_to_list(1234), 4, $0).
"1234"
> string:right(integer_to_list(12345), 4, $0).
"2345"
我还没有找到一个能像我期望的那样工作的库模块(即,即使数字不适合填充,也要打印出来),所以我编写了自己的格式化函数:

%%------------------------------------------------------------------------------
%% @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].
%%------------------------------------------------------------------------------
%%@doc格式化一个填充为零的整数
%%@end
%%------------------------------------------------------------------------------
-带填充的规范格式(Number::integer(),
Padding::integer())->iodata()。
当数字<0->
[$-|使用_填充设置_格式(-Number,padding-1)];
使用\u填充(数字、填充)格式化\u->
NumberStr=整数到列表(数字),
ZeroesRequired=max(填充-长度(NumberStr),0),
[列表:重复(需要零,$0),NumberStr]。

(您可以使用将结果转换为二进制,也可以使用((“~s”,[result])将其转换为列表。)

您可以向该答案添加解释,而不是添加其他答案。这将有助于改进该问题并帮助其他人。@CoralDoe不可能按照解释答案中的方式将注释格式化为答案。