我对RPGLE了解不多。我正在试着解决给我的这个小问题。我从来没见过用小数的习题。我想要得到7个值的百分比。因此,我想做以下计算:
例如在RPGLE中
DTotal S 3P 0
DPercnt S 2P 2
/Free
Total = 589;
Percnt = (Total/700)100;
Dsply Percnt;
*Inlr = *On;
/End-Free
期望输出为84.142857143
或将小数点后四舍五入到两个(84.14)
或四个(84.1430)
位
- 我应该为
Total
和Percent
变量使用哪种数据类型? - 我如何声明
Percent
变量(打包或分区)以保存小数点后两位或四位或N位? - 谁能在"RPG iv"中输入申报部分和计算部分?还是固定格式的?
我得到的错误和我执行的更正:
The end of the expression is expected.
(with in SEU)对于上述错误,我添加了
*
,它解决了Percnt = (Total/700) * 100;
下面是第二个错误。
The target for a numeric operation is too small to hold the result (C G D F)
对于上述错误,我将
Percnt
变量长度增加到4P 2
。但这次答案错了,
DSPLY 8414
。所以,我使用
Eval
建议如下。Eval(H) Percnt = (Total/700) * 100;
仍然输出相同:
DSPLY 8414
.谢谢@Barbara。我后来注意到这个提示.
DSPLY (%CHAR(Percnt))
给出了我想要的输出84.14
.
RPG数值变量由数字总数和小数位数定义。因此,如果您想要两个整数位和两个小数位(12.34),请将变量定义为自由格式的packed(4:2)或固定格式的4p2。
如果需要舍入,为操作码编写(H)扩展器('H'表示"半调整")。赋值的操作码是EVAL操作码,通常省略。但是如果你想添加一个扩展器,你必须对它进行编码。
DTotal S 3P 0
DPercnt S 4P 2
Total = 589;
Eval(H) Percnt = (Total/700) * 100;
DSPLY (%CHAR(Percnt));
*Inlr = *On;
除非你使用7.1之前的版本,否则你不需要再编写/FREE和/END-FREE。