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

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)

  1. 我应该使用哪种数据类型TotalPercent变量?
  2. 如何声明Percent变量(打包或分区)来保存两位、四位或 N 位小数?
  3. 任何人都可以请输入“RPG IV”或固定格式中的声明部分和计算部分吗?

我遇到的错误和我进行的更正:

  1. The end of the expression is expected.(在东南大学)

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

  2. 下面是第二个错误。

    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.

  3. 但这一次的答案是错误的DSPLY 8414。不像预期的那样。

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

  4. 仍然相同的输出:DSPLY 8414.

    谢谢@芭芭拉。我很晚才注意到这个提示DSPLY (%CHAR(Percnt))给了我想要的输出84.14

Bar*_*ris 5

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 代码。