Условие: положительное и отрицательное число в RPG

Когда я ввожу отрицательное число в свою консоль, я не получаю дисплей! Например, если ввести значение «-2», я не получу сообщение «отрицательно».

В положительных и нулевых значениях это нормально

введите здесь описание изображения

 H
 D Number          S              2S 0

  *
  /Free

      dsply 'Enter your number please : ' '' Number;

      If (Number > 0);
         dsply 'Positive';

      ElseIf (Number = 0);
         dsply 'Null';

      Else;
         dsply 'Negative';
      ENDIF;

      *inlr = *on;

  /End-Free

person juliette    schedule 17.12.2020    source источник


Ответы (3)


В справочнике RPGLE по коду операции DSPLY я нашел этот отрывок:

Если введено числовое поле, не являющееся плавающей точкой, длина которого превышает количество цифр в поле результата, а крайний правый символ не является знаком минус (-), обнаруживается ошибка и происходит второе ожидание. Пользователь должен снова ввести поле.

Кажется, код операции DSPLY ожидает, что знак минус будет замыкающим, а не ведущим.

person Scott Mildenberger    schedule 17.12.2020
comment
Ах, да, спасибо за вашу помощь. Я понял. - person juliette; 18.12.2020

Если вы нажмете F1 (помощь) в сообщении DSPLY, это покажет следующее:

Message ID . . . . . . :   RNQ5337       Severity . . . . . . . :   00         
Message type . . . . . :   Sender copy                                         
Date sent  . . . . . . :   12/18/20      Time sent  . . . . . . :   12:42:16   
                                                                               
Message . . . . :   DSPLY  Enter your number please :      0                   
Cause . . . . . :   This is an inquiry message originated from RPG procedure   
  MY_PGM in program MY_LIB/MY_PGM. The program is expecting a numeric 
  input field with a maximum length of 2 digits with 0 decimal positions.  Do  
  not type in a decimal point when entering data. When entering negative data, 
  type a negative sign ('-') immediately after the last digit of the data.     
person Barbara Morris    schedule 18.12.2020

Вы можете использовать %dec() для преобразования числового значения в строке в числовую переменную. Это позволит вашим пользователям размещать отрицательный знак слева или справа. Это может быть более удобным способом использования кода операции DSPLY.

**FREE
   //simple demo, not worrying about exceptions

   dcl-s myStr  varchar(5);
   dcl-s myNum  packed(3:0);


   dsply 'Enter your number please : ' '' myStr;
   myNum = %dec(myStr:3:0);

   Select;
   When (myNum > 0);
     dsply 'Positive';

   When (myNum = 0);
     dsply 'Zero';     // not the same a null ;-)

   Other;
     dsply 'Negative';
   EndSl;

   *inlr = *on;
   RETURN;
person WarrenT    schedule 18.12.2020