我一直在尝试在RPG中为固定精度的小数进行小数到字符串的转换,但我找不到处理该任务的BIF。在这种情况下,我想要的精确输出格式是左对齐的,没有前导或尾随零:
0010.010 -> '10.01 '
当然,我知道如何通过字符串操作自己做到这一点,这不是重点。这个问题必须有一个简单的内置解决方案。把它放在某种代码中:
Dnum S 7S03
Ds S 10A
/free
num = 010.010;
s = %char(num);
dsply s ;
/end-free
由此得到CCD_ 1。我想要'10.01 '
。%char
有一个可选参数format
,IBM很有帮助地告诉您,它用于日期和时间值。
我试着摆弄%editc
和%editw
,但没有成功。不知怎的,%editw
的editword语法对我来说很难理解(即使谷歌也不相信我想使用BIF,它一直告诉我,我真正想要的是搜索%editc
)。如果我让%editw
编译,我甚至无法说服它添加小数点。
我尝试了格式为"A"-"D"、"J"-"Q"、"X"-"Z"、"1"-"9"的'10.010 '
0。8和9不编译,其他两个都没有给我想要的。
要清楚。我不想写我自己的函数来实现这一点。我不想调用像sprintf
这样的C函数,我正在寻找一个简单的RPGLE解决方案。如果没有——那么就没有,但我想知道。对于报表生成语言来说,这似乎是一项足够简单的任务。
怎么样:
num = 010.010;
s = %trimr(%char(num):'0');
dsply s ;
要扩展Charles的解决方案,如果需要9999.000看起来像9999(即需要逗号),则需要一个编辑代码。
num = 9999.000;
s = %trimr(%trim(%trim(%editc(num: 'B')):'0':'.');
dsply s;