如何在RPGLE中声明小数点固定或自由格式?



我对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)

  1. 我应该为TotalPercent变量使用哪种数据类型?
  2. 我如何声明Percent变量(打包或分区)以保存小数点后两位或四位或N位?
  3. 谁能在"RPG iv"中输入申报部分和计算部分?还是固定格式的?

我得到的错误和我执行的更正:

  1. The end of the expression is expected.(with in SEU)

    对于上述错误,我添加了*,它解决了Percnt = (Total/700) * 100;

  2. 下面是第二个错误。

    The target for a numeric operation is too small to hold the result (C G D F)
    

    对于上述错误,我将Percnt变量长度增加到4P 2

  3. 但这次答案错了,DSPLY 8414

    所以,我使用Eval建议如下。Eval(H) Percnt = (Total/700) * 100;

  4. 仍然输出相同: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。

最新更新