我试图计算除法的算法,其余: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