Ibm midrange 在RPGLE中形成固定预测小数

Ibm midrange 在RPGLE中形成固定预测小数,ibm-midrange,rpgle,rpg,Ibm Midrange,Rpgle,Rpg,我一直在尝试在RPG中对固定精度的十进制进行十进制到字符串的转换,但我找不到BIF来处理该任务。在这种情况下,我想要的精确输出格式是左对齐的,没有前导或尾随零: 0010.010 -> '10.01 ' 当然,我知道如何用字符串操作来实现这一点,这不是重点。这个问题必须有一个简单的内置解决方案。要将其放在一些代码中: Dnum S 7S03 Ds S

我一直在尝试在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
,它告诉您,它用于日期和时间值

我试着胡闹
%editc
%editw
,但没有多大成功。不知何故,
%editw
的editword语法让我无法理解(甚至谷歌也不相信我想使用BIF,它一直告诉我,我真正想要的是搜索
%editc
)。如果我让
%editw
进行编译,我甚至无法说服它添加小数点

我尝试了
%editc
格式为'A'-'D','J'-'Q','X'-'Z','1'-'9'。 8和9不编译,其他两个都没有给我我想要的

说清楚。我不想自己编写这样的函数。我不想调用C函数,比如
sprintf
,我在寻找一个简单的RPGLE解决方案。如果没有,那么就没有,但我想知道。在报表生成语言中,这似乎是一项非常简单的任务。

如何:

   num = 010.010;                                 
   s = %trimr(%char(num):'0');                                
   dsply s ;
那么:

   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;

为了扩展Charles的解决方案,如果需要9999.000看起来像9999(即需要逗号),则需要编辑代码

num = 9999.000;
s = %trimr(%trim(%trim(%editc(num: 'B')):'0':'.');
dsply s;

如何显示以下内容?0.010 & 0.100 & .104 & .105@Charles在我的例子中:
0.01
0.1
0.104
0.105
,所有这些数字在第一位之前都没有空格。下面的显示应该如何?0.010 & 0.100 & .104 & .105@Charles在我的例子中:
0.01
0.1
0.104
0.105
所有这些数字在第一个数字之前都没有空格。