我試圖計算除法的算法,其餘:AS400 CL腳本算術給出0
remainder = dividend - (dividend/divisor) * divisor
的整數計算所有。
舉例: 獲得的15/6
1. (15/6) = 2
2. (2) * 6 = 12
3. 15 - 12 = 3
餘
的6月15日的剩餘確實3.
我的問題在我的CL腳本使用這種算法只是返回0所有時間。這是爲什麼?
pgm
dcl var(÷nd) type(*int) value(15)
dcl var(&divisor) type(*int) value(6)
dcl var(&remainder) type(*int)
dcl var(&msg) type(*char)
/* Calculate remainder. [ed: 29Sep2016] "* &remainder" is now: "* &divisor" */
chgvar var(&remainder) value(÷nd - (÷nd/&divisor) * &divisor)
/* Prior to 29-Sep-2016 redaction, the above was coded as the incorrect expression: +
chgvar var(&remainder) value(÷nd - (÷nd/&divisor) * &remainder) +
and remains, commented-out, to preserve relevance of user-comments about the OP */
/* Cast remainder and display. */
chgvar var(&msg) value(&remainder)
sndpgmmsg msg(&msg)
endpgm
編譯時:
crtclpgm pgm(test) srcfile(test) srcmbr(test)
運行:
call test
輸出:
0
在OP顯示,截至今天24月 - 2016 CL程序的源代碼,是肯定不會的東西表現出的副本\粘貼描述的困難;即第一個「CHGVAR」表達式的表達式與「試圖計算」的表達式明顯不符 - 並且結果將始終是「&dividend」的初始值,而不是主題subject \標題。 – CRPence
否,因爲所述表達式中的值是類型整數,其在分割的截斷中應該不同。至少在任何體面的編程語言中都會發生這種情況。 –
「不」是什麼?我指出「剩餘=股息 - (股息/除數)*除數」與「餘額=股息 - (股息/除數)*餘數」不同。 CL來源編碼後者。 Re整數除法,任何不錯的編程語言都提供了整數除法運算符和另一個除法運算符,它不會愚蠢地強制使用兩個整數運算數的整數結果。 CL並不愚蠢地強制整數結果,但未能提供整數除法運算符 - 但CL是一種強大的控制語言,並不意味着它是一種真正的*編程語言。 – CRPence