1

有没有一种在 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"

(Python)

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

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

如何在 Erlang 中使用填充格式化数字

Erlang:如何将小数转换为用零填充的十六进制字符串

4

1 回答 1

3

目前在 Erlang 中没有直接的方法来做到这一点。填充字符适用于整个字段,它们无法仅填充实际值。精度字段用于打印整数的基数。使用~w没有帮助,因为精度与字段宽度的行为方式相同。我本人最近也在尝试这样做,但没有提出一个简单的解决方案。

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

于 2013-08-25T20:11:40.773 回答