質問
私が理解しているように、次の文:
print using "<0>#,##", 1234
.
出力:
1,234
.
は理にかなっています。最先端のゼロ(どれがありません)および出力したい5文字に使用できる5文字。私が理解しているもう一つの声明:
print using "<0>#####,#######", "12345678"L
.
どの出力:
00,012,345,678
.
もう一度、フォーマット文字を理解することを確認してください。数字、カンマ、および先行ゼロの14文字。
私が理解していないものは、次のとおりです。
print using "<0>####,#######", "12345678"L
.
出力:
00,012,345,678
.
きっとそれはそれが一つの主要なゼロのものですか?確かにそれは次のようになるべきです:
0,012,345,678
.
この例のように、指定された長さの長さの上および上方に先行ゼロが追加されることがあることがわかります。
print using "<0>###,#######", "12345678"L
.
を生産する
0,012,345,678
.
十分なスペースを予約していないように。しかし、以前の例は基本的なバグであるか、私はここに何か不足していますか?
解決
はバグのように見えます。<0>と数千のセパレータが一緒に遊ぶときにゼロを先導するボーナスを追加します。 その<0>は1ポジションをカウントする必要があります。
Basic 1.3(OpenVMS 8.3)およびOpenVMS 8.4では1.7-000の下で再現します。 私は小さいテスト値を使用して、Max integer sizeのmax整数サイズとの混乱/対話を避けることを避けました "長い整数の精度の10桁"基本リファレンスマニュアル。
BTW。「NNN」Lを利用しています。それはあらゆる(黙示的な)変換ディスカッションを入っています。 特定の位置を意味するのを避けるために、カンマを###シーケンスの最後または開始に移動します。
(uggly)回避策として、フォーマット$(val、format-string)を使用することがあります。 同じ問題がありますが、プログラムは結果を調整するための変更を受けます。
$ cre tmp.bas
1 OPTION TYPE = EXPLICIT, SIZE = INTEGER LONG, CONSTANT TYPE = INTEGER
print using "<0>###,", 1234
print using "<0>###,", 123
print using "<0>###,", 12
print using "<0>###", 1234
print using "<0>###", 123
print using "<0>###", 12
Exit
$ bas tmp
$ link tmp
$ run tmp
1,234
00,123
00,012
1234
0123
0012
. 所属していません StackOverflow