преобразовать 0,01 в 0,01 и -,01 в -0,01 в rpgle ibm

Я искал лучший способ конвертировать 0,01 или -0,01 в 0,01 или -0,01. Это необходимо, когда я хочу преобразовать десятичное число в символ.

После долгих поисков с помощью EDITW и EDITC я получил код ниже.

D Sales         S              9S 2
D Net_Sales     S             10A

// Sales variable may contain positive or negative amount

If  Sales >= 0
   Net_Sales = %Trim(%Xlate(' ':'0': %EditC(Sales:'3'):7)) ;
Else
   Net_Sales = '-' + %Trim(%Xlate(' ':'0': %EditC(Sales:'3'):7)) 
EndIf

Это отлично работает для всех случаев, но почему-то меня это не убедило. И случайно заметил в заголовке спецификацию DECEDIT

H DECEDIT('0.')

это будет моя лучшая альтернатива для требования или у нас есть что-нибудь еще?

Заранее спасибо за помощь!


person Yusuf    schedule 28.04.2017    source источник


Ответы (1)


Если вы хотите, чтобы ноль печатался перед десятичной дробью и плавающим отрицательным знаком, вам нужно использовать ctl-opt decedit('0.'). Вот несколько примеров сравнения %char(), %editc() и %editw():

   dcl-s value1        Zoned(7:2) Inz(.01);
   dcl-s value2        Zoned(7:2) Inz(-.01);

   dcl-s output        Char(10) Inz('');

   output = %char(value1);
   dsply output;
   output = %char(value2);
   dsply output;

   output = %editc(value1:'N');
   dsply output;
   output = %editc(value2:'N');
   dsply output;

   output = %editw(value1:'  , 0 .  -');
   dsply output;
   output = %editw(value2:'  , 0 .  -');
   dsply output;

   return;

При компиляции с ctl-opt decedit('0.'); вывод:

DSPLY  0.01        
DSPLY  -0.01       
DSPLY        0.01  
DSPLY       -0.01  
DSPLY       0.01   
DSPLY       0.01-  

При компиляции без ctl-opt decedit('0.'); вывод:

DSPLY  .01        
DSPLY  -.01       
DSPLY         .01  
DSPLY        -.01  
DSPLY       0.01   
DSPLY       0.01-  
person jmarkmurphy    schedule 28.04.2017
comment
Большое спасибо за Ваш ответ. Я только что заметил, что когда я пытался выполнить без DECEDIT('0. '), я получаю первые два вывода как .01 и -.01 . Пожалуйста, помогите прояснить это. Но мои требования удовлетворяет DECEDIT, так что я доволен. - person Yusuf; 28.04.2017