2012-10-27 65 views
0

我在使用一些cobol代码时遇到了一些麻烦。在下面的代码中,它会导致这两个错误。编译器不喜欢我尝试添加的时候。Cobol不是数字名称

CH7PPB.CBL:158: Error: 'NEW-DUES' is not numeric name 
CH7PPB.CBL:161: Error: 'NEW-INSURANCE' is not numeric name 
MOVE UNION-DUES TO OLD-DUES 
    MULTIPLY UNION-DUES BY .04 GIVING NEW-DUES 
    ADD UNION-DUES TO NEW-DUES 
    MOVE INSURANCE TO OLD-INSURANCE 
    MULTIPLY INSURANCE BY .03 GIVING NEW-INSURANCE 
    ADD INSURANCE TO NEW-INSURANCE 

NEW-DUES和NEW-INSURANCE定义如下。

 05 NEW-DUES      PIC Z9(4).99. 
     05 NEW-INSURANCE     PIC Z9(4).99. 

谢谢你的帮助。

回答

0

解决了这个通过使用两个临时变量不知道这是如何做到这一点,但它的工作。

  MOVE ANNUAL-SALARY TO OLD-SALARY 
      MULTIPLY ANNUAL-SALARY BY .07 GIVING TEMP 
      ADD ANNUAL-SALARY,TEMP TO TEMP2 
      MOVE TEMP2 TO NEW-SALARY 
      MOVE ZEROS TO TEMP, TEMP2 
      MOVE UNION-DUES TO OLD-DUES 
      MULTIPLY UNION-DUES BY .04 GIVING TEMP 
      ADD UNION-DUES,TEMP TO TEMP2 
      MOVE TEMP2 TO NEW-DUES 
      MOVE ZEROS TO TEMP, TEMP2 
      MOVE INSURANCE TO OLD-INSURANCE 
      MULTIPLY INSURANCE BY .03 GIVING TEMP 
      ADD INSURANCE,TEMP TO TEMP2 
      MOVE TEMP2 TO NEW-INSURANCE 
      MOVE ZEROS TO TEMP, TEMP2 
+1

我想这可能是您了解COMPUTE动词的好时机!以上可能工作,但它是可怕的编码!例如,你可能想尝试一下:Neal补充说:“计算新薪水=年薪=(年薪= 0.07)”或“计算新薪水= 1.07 *年薪”+ – NealB

+0

+1,钱。请务必阅读'ON SIZE ERROR'声明性陈述。 –

2

我很高兴你已经解决了这个问题。

只是为了记录,您不能在计算中使用编辑过的格式。两个变量的PICTURE字符串中的字符“Z”将使变量不被编译器视为数字。

你确实必须声明一个完整的数字变量(无格式),并将其结果值移到格式化变量之后。

0

除了由NealB建议的COMPUTE:

 MOVE ANNUAL-SALARY TO OLD-SALARY 
     MULTIPLY ANNUAL-SALARY BY 1.07 GIVING NEW-SALARY 
     MOVE UNION-DUES TO OLD-DUES 
     MULTIPLY UNION-DUES BY 1.04 GIVING NEW-DUES 
     MOVE INSURANCE TO OLD-INSURANCE 
     MULTIPLY INSURANCE BY 1.03 GIVING NEW-INSURANCE 

中所示的代码中使用的TEMP2是特别不好。它首先依赖于它的初始值(大概是一个VALUE子句),并且第二次依赖于块末尾的'MOVE ZEROS TO TEMP,TEMP2'。这是一个不好的方法来做到这一点。 TEMP的重复初始化是毫无意义的,因为TEMP始终是GIVING的“目标”,所以它在MULTIPLY时的价值是无关紧要的。

相关问题