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

时间:2017-04-28 08:28:55

标签: ibm-midrange rpgle

我一直在寻找将.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

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

H DECEDIT('0.')

这将是我对该要求的最佳选择还是我们还有其他什么?

提前感谢您的帮助!

1 个答案:

答案 0 :(得分: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;

使用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-