我一直试图在RPG中对固定精度小数进行十进制到字符串转换,但我找不到BIF来处理任务。在这种情况下我想要的精确输出格式是左对齐而没有前导或尾随零:
0010.010 -> '10.01 '
当然,我知道如何通过字符串操作自己做到这一点,这不是重点。这个问题必须有一个简单的内置解决方案。把它放在一些代码中:
Dnum S 7S03
Ds S 10A
/free
num = 010.010;
s = %char(num);
dsply s ;
/end-free
这会给'10.010 '
。我想要'10.01 '
。 %char
有一个可选参数format
,IBM有用地告诉您,它用于日期和时间值。
我尝试使用%editc
和%editw
,但没有取得多大成功。不知何故,%editw
的editword语法拒绝让我理解(甚至谷歌也拒绝相信我想使用那个BIF,它一直告诉我,我真正想要的是搜索%editc
) 。如果我完全编译%editw
,我甚至无法说服它,添加小数点。
我尝试了%editc
格式' A' - ' D',' J' - ' Q',' X' - ' Z',' 1' - ' 9'。
8和9没有编译,其他人都没有给我,我想要的。
要清楚。我不想写自己的功能。我不想调用C函数,例如sprintf
,我正在寻找一个简单的RPGLE解决方案。如果没有 - 那么不是,但我想知道。在报告生成语言中,这似乎是一项非常简单的任务。
答案 0 :(得分:3)
怎么样:
num = 010.010;
s = %trimr(%char(num):'0');
dsply s ;
答案 1 :(得分:2)
延伸查尔斯'解决方案,如果您需要9999.000看起来像9,999(即您需要逗号),那么您将需要一个编辑代码。
num = 9999.000;
s = %trimr(%trim(%trim(%editc(num: 'B')):'0':'.');
dsply s;