如何在Erlang中使用填充格式化减号

时间:2013-08-25 13:45:37

标签: erlang format

有没有一种很好的方法在Erlang中用零填充格式化负数?以下适用于无符号值,但对于负值,在符号前填充零。

io:format("~4..0B~n", [42]).
0042
ok

io:format("~4..0B~n", [-42]).
0-42
ok

我想到的是以下格式。

(红宝石)

1.9.2-p290 :004 > sprintf("%05d", -42)
"-0042"
1.9.2-p290 :005 > sprintf("%05d", 42)
"00042"

(蟒)

>>> "%05d" % -42
'-0042'
>>> "%05d" % 42
'00042'

我已经提到了以下问题,但未能找到一个谈论负值的问题。

How to format a number with padding in Erlang

Erlang: How to transform a decimale into a Hex string filled with zeros

1 个答案:

答案 0 :(得分:3)

目前在Erlang中没有直接的方法。填充字符用于整个字段,它们无法填充实际值。精度字段用于打印整数的基数。使用~w没有帮助,因为精度的行为与字段宽度相同。我自己最近试图这样做,而不是提出一个简单的解决方案。

修改 如果你看这里https://github.com/rvirding/luerl/blob/develop/src/luerl_string.erl#L156,有一个函数format可以执行C sprintf格式化输出。它是为Lua实现编写的,可能比您需要的更通用,但请查看函数print_integerprint_float以进行基本处理。我有一些更好的功能,我今晚应该推动。