Cobol 与“有麻烦”;“简单数学”;

Cobol 与“有麻烦”;“简单数学”;,cobol,Cobol,我有一个任务在哪里?我需要拿现金支付的总工资,并显示员工的工资有多少100、50、20、10、5、1。我确信这只是我的数学不起作用,但这是我的代码 COMPUTE W02-PAY-100S = W02-GROSS-PAY / 100 COMPUTE PAY = W02-GROSS-PAY - (W02-PAY-100S * 100) COMPUTE W02-PAY-50S = PAY / 50 COMPUTE PAY = PAY - (

我有一个任务在哪里?我需要拿现金支付的总工资,并显示员工的工资有多少100、50、20、10、5、1。我确信这只是我的数学不起作用,但这是我的代码

       COMPUTE W02-PAY-100S = W02-GROSS-PAY / 100
       COMPUTE PAY = W02-GROSS-PAY - (W02-PAY-100S * 100) 
       COMPUTE W02-PAY-50S = PAY / 50 
       COMPUTE PAY = PAY - (W02-PAY-50S * 50)
       COMPUTE W02-PAY-20S = PAY / 20
       COMPUTE PAY = PAY - (W02-PAY-20S * 20)
       COMPUTE W02-PAY-10S = PAY / 10
       COMPUTE PAY = PAY - (W02-PAY-10S * 10)
       COMPUTE W02-PAY-5S = PAY / 5
       COMPUTE PAY = PAY - (W02-PAY-5S * 5)
       COMPUTE W02-PAY-1S = PAY / 1
       .

最后的结果是前100个显示为3,然后其他所有显示为0。

我怀疑PAY的定义是
PIC 9
,而不是
PIC 9(7)
(或其他任何内容),或者您使用的其他字段的定义有问题(比如没有整数部分)

然而,对于COBOL来说,利用
COMPUTE
类似于其他语言中的赋值语句,这样做是“错误的”

相反,COBOL为数学动词提供了更多的细微差别。看一看
给予
余数划分

DIVIDE W02-GROSS-PAY        BY 100
  GIVING                    NOTES-100
  REMAINDER                 W-RUNNING-BALANCE-LESS-100S
DIVIDE W-RUNNING-BALANCE-LESS-100S 
                            BY 50
  GIVING                    NOTES-50
  REMAINDER                 W-RUNNING-BALANCE-LESS-50S
DIVIDE W-RUNNING-BALANCE-LESS-50S 
                            BY 20
  GIVING                    NOTES-20
  REMAINDER                 W-RUNNING-BALANCE-LESS-20S
DIVIDE W-RUNNING-BALANCE-LESS-20S 
                            BY 10
  GIVING                    NOTES-10
  REMAINDER                 W-RUNNING-BALANCE-LESS-10S
DIVIDE W-RUNNING-BALANCE-LESS-10S 
                            BY 05
  GIVING                    NOTES-05
  REMAINDER                 COINS-01
如果你让你的电脑工作,你不需要最后一个(除以一,你会得到原来的数字作为答案)。有了计算机,您在COBOL中所做的工作比必要的多得多

既然您已经了解了
除法
,还可以看看
乘法
加法
减法

要完成此图,请查看内部函数,如
INTEGER
MOD
。国防部和更多,你有以上。整数是不必要的,因为一个简单的
移动到一个没有小数部分的字段将到达那里。移动到没有整数部分的字段将得到分数


不一定要找一些能让你像用另一种语言那样做的东西。您可以通过这种方式“传递”COBOL模块,但您不会真正学习COBOL。

您需要显示字段的定义。