【问题标题】:Formating fixed presicion decimals in RPGLE在 RPGLE 中格式化固定精度小数
【发布时间】:2015-10-30 16:00:45
【问题描述】:

我一直在尝试在 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 的编辑字语法对我来说是无法理解的(甚至谷歌也拒绝相信我想使用那个 BIF,它一直告诉我我真正想要的是搜索 %editc)。如果我得到%editw 来编译,我什至无法说服它添加小数点。

我尝试%editc 使用格式“A”-“D”、“J”-“Q”、“X”-“Z”、“1”-“9”。 8 和 9 不编译,其他的都没有给我,我想要的。

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

【问题讨论】:

  • 下面应该如何显示? 0.010 & 0.100 & .104 & .105
  • @Charles 在我的例子中:0.010.10.1040.105 第一个数字前没有任何空格。

标签: ibm-midrange rpgle rpg


【解决方案1】:

怎么样:

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

【讨论】:

    【解决方案2】:

    为了扩展 Charles 的解决方案,如果您需要 9999.000 看起来像 9,999(即您需要逗号),那么您将需要一个编辑代码。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多