1

私が理解しているように、次のステートメント:

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

十分なスペースを確保していないように見えますが。しかし、前の例は Basic のバグですか、それとも何かが足りないのでしょうか?

4

1 に答える 1

1

バグのように見えます。<0> と千単位の区切り文字が一緒に再生されると、先行ゼロがボーナスとして追加されます。その <0> は 1 ポジションとしてカウントされます。

私にとっては、Basic 1.3 (OpenVMS 8.3) および OpenVMS 8.4 の 1.7-000 で再現されます。「LONG整数の10桁の精度」Basic Refマニュアルの最大整数サイズとの混乱/相互作用の作成を避けるために、より小さなテスト値を使用しました。

ところで..「nnn」Lをうまく使ってください。これは、(暗黙の) 変換に関する議論を先取りします。特定の位置を暗示しないように、コンマを ### シーケンスの最後または最初に移動します。

(しかし醜い) 回避策として、FORMAT$ ( 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
于 2014-02-25T15:40:11.510 に答える