有没有一种很好的方法在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
答案 0 :(得分:3)
目前在Erlang中没有直接的方法。填充字符用于整个字段,它们无法填充实际值。精度字段用于打印整数的基数。使用~w
没有帮助,因为精度的行为与字段宽度相同。我自己最近试图这样做,而不是提出一个简单的解决方案。
修改强>
如果你看这里https://github.com/rvirding/luerl/blob/develop/src/luerl_string.erl#L156,有一个函数format
可以执行C sprintf
格式化输出。它是为Lua实现编写的,可能比您需要的更通用,但请查看函数print_integer
和print_float
以进行基本处理。我有一些更好的功能,我今晚应该推动。