use*_*253 2 decimal-point division rpgle percentage
我对RPGLE了解不多。我正在尝试解决给我的这个小练习。我从来没有做过或见过使用小数的练习。我想获得 7 个值的百分比。所以,我想做如下计算。
例如在 RPGLE 中。
DTotal S 3P 0
DPercnt S 2P 2
/Free
Total = 589;
Percnt = (Total/700)100;
Dsply Percnt;
*Inlr = *On;
/End-Free
Run Code Online (Sandbox Code Playgroud)
预期输出是84.142857143将小数位四舍五入到两位(84.14)或四位(84.1430)。
Total和Percent变量?Percent变量(打包或分区)来保存两位、四位或 N 位小数?我遇到的错误和我进行的更正:
The end of the expression is expected.(在东南大学)
对于上面的错误,我添加了*并解决了Percnt = (Total/700) * 100;
下面是第二个错误。
The target for a numeric operation is too small to hold the result (C G D F)
Run Code Online (Sandbox Code Playgroud)
对于上述错误,我将Percnt变量长度增加到4P 2.
但这一次的答案是错误的DSPLY 8414。不像预期的那样。
所以,我Eval按照下面的建议使用。Eval(H) Percnt = (Total/700) * 100;
仍然相同的输出:DSPLY 8414.
谢谢@芭芭拉。我很晚才注意到这个提示。DSPLY (%CHAR(Percnt))给了我想要的输出84.14。
RPG 数值变量由总位数和小数位数定义。因此,如果您想要两个整数位和两个小数位 (12.34),请将变量定义为自由形式的 Packed(4:2) 或固定形式的 4P 2。
如果您想要舍入,请为操作码编码 (H) 扩展器(“H”代表“半调整”)。赋值操作码是 EVAL 操作码,通常被省略。但如果您想添加扩展器,则必须对其进行编码。
DTotal S 3P 0
DPercnt S 4P 2
Total = 589;
Eval(H) Percnt = (Total/700) * 100;
DSPLY (%CHAR(Percnt));
*Inlr = *On;
Run Code Online (Sandbox Code Playgroud)
除非您使用的是 7.1 之前的版本,否则您无需再编写 /FREE 和 /END-FREE 代码。