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"

(パイソン)

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

以下の質問を参照しましたが、マイナス値に関する質問を見つけることができませんでした。

Erlang でパディングを使用して数値をフォーマットする方法

Erlang: 10 進数をゼロで埋められた 16 進文字列に変換する方法

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 に答える