我理解它,以下声明:

print using "<0>#,##", 1234
.

输出:

1,234
.

是有意义的;我们要输出的五个字符可用的前导零(其中没有)和五个字符。我理解的另一个陈述是:

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
.

似乎没有保留足够的空间。但是前面的例子是基本的错误,或者我在这里缺少一些东西吗?

有帮助吗?

解决方案

看起来像bug。当<0>和数千分的分隔符在一起时,它会增加零奖励零。 <0>应该计算1个位置。

它在基本的1.3(OpenVMS 8.3)下为我和OpenVMS 8.4的1.7-000再现。 我使用较小的测试值来避免使用“长整数的长度精度的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
.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top