在 rpgle ibm 中将 .01 转换为 0.01 & -.01 为 -0.01

convert .01 to 0.01 & -.01 to -0.01 in rpgle ibm

我一直在寻找将 .01 或 -.01 转换为 0.01 或 -0.01 的最佳方法。当我想将小数转换为字符时,这是需要的。

在使用 EDITW 和 EDITC 进行大量搜索后,我得到了以下代码。

D Sales         S              9S 2
D Net_Sales     S             10A

// Sales variable may contain positive or negative amount

If  Sales >= 0
   Net_Sales = %Trim(%Xlate(' ':'0': %EditC(Sales:'3'):7)) ;
Else
   Net_Sales = '-' + %Trim(%Xlate(' ':'0': %EditC(Sales:'3'):7)) 
EndIf

这对所有情况都适用,但有些我不相信。不小心我注意到了一个 header 规范 DECEDIT

H DECEDIT('0.')

这是我满足要求的最佳选择还是我们还有其他选择?

在此先感谢您的帮助!

如果要在小数点前打印零,以及浮动负号,则需要使用ctl-opt decedit('0.')。以下是比较 %char()%editc()%editw() 的一些示例:

   dcl-s value1        Zoned(7:2) Inz(.01);
   dcl-s value2        Zoned(7:2) Inz(-.01);

   dcl-s output        Char(10) Inz('');

   output = %char(value1);
   dsply output;
   output = %char(value2);
   dsply output;

   output = %editc(value1:'N');
   dsply output;
   output = %editc(value2:'N');
   dsply output;

   output = %editw(value1:'  , 0 .  -');
   dsply output;
   output = %editw(value2:'  , 0 .  -');
   dsply output;

   return;

使用 ctl-opt decedit('0.'); 编译时,输出为:

DSPLY  0.01        
DSPLY  -0.01       
DSPLY        0.01  
DSPLY       -0.01  
DSPLY       0.01   
DSPLY       0.01-  

在没有 ctl-opt decedit('0.'); 的情况下编译时,输出为:

DSPLY  .01        
DSPLY  -.01       
DSPLY         .01  
DSPLY        -.01  
DSPLY       0.01   
DSPLY       0.01-