GnuCOBOL PIC 999V99-意外结果?
在GnuCOBOL 3.1-rc1.0下,下面的代码有什么错GnuCOBOL PIC 999V99-意外结果?,cobol,gnucobol,Cobol,Gnucobol,在GnuCOBOL 3.1-rc1.0下,下面的代码有什么错 IDENTIFICATION DIVISION. PROGRAM-ID. NUMTEST. DATA DIVISION. WORKING-STORAGE SECTION. 01 NUM PIC 999V99. PROCEDURE DIVISION. DISPLAY "ENTER NUMBER: ". ACCEPT NUM.
IDENTIFICATION DIVISION.
PROGRAM-ID. NUMTEST.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 NUM PIC 999V99.
PROCEDURE DIVISION.
DISPLAY "ENTER NUMBER: ".
ACCEPT NUM.
DISPLAY "NUMBER = ".
DISPLAY NUM.
STOP RUN.
我输入123.45作为输入。我期望123.45作为输出,但是我得到的是123.40,它们是纯的接受,它们只从命令行读取数据(你也可以在那里输入一个大的lorem ipsum) 虽然我认为这是一个合理的要求,使其“按预期”工作,但您目前的最佳选择是
仅接受picx
,然后使用将FUNCTON NUMVAL(输入数据)移动到NUM
(之前可能使用函数测试-NUMVAL()
测试数据)。对于DISPLAY
,您可能需要一个带有PICTURE
的编辑字段,如ZZ9.99
在任何情况下:请注意V
是一个隐含的小数点,它不是实际存储的一部分
使用“扩展”屏幕IO(=不从命令行输入)会带来一些好处(比如只允许数字数据,不允许超过字段大小),但也有不同的缺点(例如,您应该使用列/行,而数字接受在GC 3.1中仍然存在一些问题)
正如JoelFan所建议的那样,我已经测试了编辑过的字段-这些字段目前只有在“命令行模式”下才能正常工作(因此,如果使用了定位等属性,则不会):
产生预期结果:
ENTER NUMBER:
123.45
NUMBER =
123.45/123.45
ENTER NUMBER:
1.2
NUMBER =
001.20/ 1.20
ENTER NUMBER:
a
NUMBER =
000.00/ 0.00
ENTER NUMBER:
1234567
NUMBER =
567.00/567.00
注意:当使用-fec=all
/-debug
编译时,第三种情况实际上会引发异常(目前没有),最后一种情况是完全正确的,因为数字是右对齐的
仍然:接受字母数字数据,进行显式检查/转换,并显示为编辑字段,如上面的NUM-OUT
是最安全的选择。感谢您的帮助。看来我需要研究一下函数NUMVAL的事情。我以前从未见过它(我上一次接触COBOL是在1988年或1989年,在大学!)如何更改INPUT-DATA
以使用编辑过的pic(999.99
)而不是999V99
)?GnuCOBOL可能不接受带有小数点的编辑项作为“扩展”(非命令行)屏幕输入,但如果您不需要“扩展”版本,在非标准使用方面没有问题(大多数屏幕i/o未标准化),然后:是的,它工作正常(只要您只输入有效数据)。我将更新帖子。是的,我可以确认PIC 999.99在输入123.45时能完美工作。非常感谢Simon和JoelFan
ENTER NUMBER:
123.45
NUMBER =
123.45/123.45
ENTER NUMBER:
1.2
NUMBER =
001.20/ 1.20
ENTER NUMBER:
a
NUMBER =
000.00/ 0.00
ENTER NUMBER:
1234567
NUMBER =
567.00/567.00