在RPGLE

时间:2015-10-30 16:00:46

标签: ibm-midrange rpgle rpg

我一直试图在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有一个可选参数formatIBM有用地告诉您,它用于日期和时间值。

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

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

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

2 个答案:

答案 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;