2015-09-28 60 views
0

我有一個任務在哪裏?我需要支付現金支付的總工資,並顯示員工支付了多少個100s,50s,20s,10s,5s,1s。我敢肯定,它只是我的數學不工作,但這裏是我的代碼在「簡單的數學」中遇到問題

 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 
     . 

什麼最終發生的是第一100S顯示爲3,那麼其他一切都是0。

+2

您需要顯示字段的定義。 –

回答

2

我懷疑PAY被定義爲PIC 9而不是PIC 9(7)(或其他),或者您使用的其他字段的定義存在問題(例如沒有整數部分)。

但是,通過使用COMPUTE就像是其他語言中的賦值語句這一事實,您正在討論COBOL的「錯誤」方法。

取而代之的是COBOL爲數學動詞提供更多的細微差別。看看DIVIDEGIVINGREMAINDER

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 

如果你得到你的計算器工作,你不需要最後一個(除以1給你作爲答案的原始數字)。通過COMPUTE,您可以在COBOL中做更多的工作。

現在您已知了DIVIDE,也請看MULTIPLYADDSUBTRACT

要完成該圖片,請查看INTEGERMOD的固有功能。 MOD和更多,你有上面。 INTEGER是不必要的,因爲簡單的MOVE到沒有小數部分的字段將會到達那裏。移動到沒有整數部分的字段將會得到分數。

不一定會尋找一些東西,讓您像使用其他語言那樣去做。您可以通過這種方式「傳遞」您的COBOL模塊,但您不會真正學習COBOL。