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.')
这将是我最好的替代要求还是我们还有其他什么?
在此先感谢您的帮助!
如果要在小数点前打印零,并且需要浮动负号,则需要使用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)
归档时间: |
|
查看次数: |
189 次 |
最近记录: |