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

Yus*_*suf 1 rpgle ibm-midrange

我一直在寻找将.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
Run Code Online (Sandbox Code Playgroud)

这适用于所有情况,但有些我不相信.不小心我注意到标题规范DECEDIT

H DECEDIT('0.')

这将是我最好的替代要求还是我们还有其他什么?

在此先感谢您的帮助!

jma*_*phy 5

如果要在小数点前打印零,并且需要浮动负号,则需要使用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;
Run Code Online (Sandbox Code Playgroud)

ctl-opt decedit('0.');输出编译时是:

DSPLY  0.01        
DSPLY  -0.01       
DSPLY        0.01  
DSPLY       -0.01  
DSPLY       0.01   
DSPLY       0.01-  
Run Code Online (Sandbox Code Playgroud)

编译时没有ctl-opt decedit('0.');输出是:

DSPLY  .01        
DSPLY  -.01       
DSPLY         .01  
DSPLY        -.01  
DSPLY       0.01   
DSPLY       0.01-  
Run Code Online (Sandbox Code Playgroud)