你可以看一下内部函数NUMVAL。
你需要有“好”的数据显示,截至NUMVAL,大型机上,无论如何,失败,如果给定的无效数据(文本是不是有效的“编辑”编号)
COMPUTE X-TO-NUMERIC = FUNCTION NUMVAL (text-data)
你可以这样定义:
01 TEXT-NUMBER PIC X(10).
01 EDITED-NUMBER REDEFINES TEXT-NUMBER PIC 9(7).99 (or Z(6)9.99 or Z(7)9.99 or whatever)
01 X-TO-NUMERIC PIC 9(7)V99.
MOVE EDITED-NUMBER TO X-TO-NUMERIC
仍然可能失败,或者只是错误,无效的数据。
或者说,我的首选方法:
01 CONVERTED-NUMBER PIC 9(7)V99.
01 FILLER REDEFINES CONVERTED-NUMBER.
05 CN-INTEGER-PART PIC X(7).
05 CN-DECIMAL-PART PIC XX.
01 TEXT-NUMBER PIC X(10).
01 FILLER REDEFINES TEXT-NUMBER.
05 TN-INTEGER-PART PIC X(7).
05 TN-DECIMAL-POINT PIC X.
88 TN-DECIMAL-POINT VALID VALUE ".".
05 TN-DECIMAL-PART PIC XX.
IF (TN-INTEGER-PART NUMERIC)
AND (TN-DECIMAL-PART NUMERIC)
AND (TN-DECIMAL-POINT)
MOVE TN-INTEGER-PART TO CN-INTEGER-PART
MOVE TN-DECIMAL-PART TO CN-DECIMAL-PART
ELSE
deal with invalid
END-IF
不会失败,不会得到不正确的结果。
编辑:为什么我没有建议参考修改?如果仅使用文字,如果使用数据名称,仍然不像数据定义方法那样清晰和慢,那么对于人类而言,“读取”就不那么容易了,所以我改变了它们。
编辑。在这里再次引用另一个问题,我注意到:在这个例子中是。无需将CN-INTEGER-PART,CN-DECIMAL-PART,TN-INTEGER-PART或TN-DECIMAL-PART定义为数字字段。