我一直在寻找将.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.')
这将是我对该要求的最佳选择还是我们还有其他什么?
提前感谢您的帮助!
答案 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-