2016-05-09 4 views
0

Я пытаюсь преобразовать pic S9 (9) V99 comp-3 поле, которое хранилось с двоичным в нем. Отображается следующим образом: 6/PS X'000000002000 '.преобразование двоичного ввода в поле comp -3 Cobol

Эта сумма должна отображаться следующим образом 20.00. Я пытаюсь найти правильный способ конвертировать его в поле p9-9 (9) V99.

Благодаря

+0

Правильный способ создания отформатированного выходного изображения Что-то вроде ПИК ---, ---, - 9.99. –

+0

Если я переместил его в поле 9 (05), он выйдет так, как этот X'F0F0F0F0F2 '. Он не работает с этим изображением. – user3127986

+0

Не видя кода COBOL, я не вижу, откуда приходит FFFFF. Переход от полей PIC S (9) V99 COMP-3 к полю PIC 9 (5) должен отображать 00020. Переполнение стека - это вопрос и сайт ответа, а не место, где я могу обучать вас в тонкости COBOL PICTURE кодирование. В Интернете есть много учебников по COBOL. –

ответ

1

это в основном так же, как Decode a Binary Coded Decimal

создается комп-3 с более 1 десятичного знака и сделать «рис х» мов эс.

01 WS-AMT-IN     PIC S9(009)V99 COMP-3. 
    01 WS-AMT-IN-X REDEFINES     
     WS-AMT-IN     PIC X(006). 

    01 WS-AMT-OUT1    PIC S9(009)V999 COMP-3. 
    01 REDEFINES WS-AMT-OUT1    
     03 WS-AMT-OUT1-X   PIC X(006). 
     03      PIC s9 comp-3 value zero. 

01 WS-AMT-OUT-2    PIC S9(009)V99 COMP-3. 


    Move X'000000002000'   to WS-AMT-IN-X 
    Move WS-AMT-IN-X    to WS-AMT-OUT1-x 
    Move WS-AMT-OUT1    to WS-AMT-OUT-2 
1

Вот как я решить ее:

01 WS-ZONENUM11.         
    05 WS-ZONE9NUM     PIC 9(009). 
    05 WS-ZONE2NUM     PIC 9(002). 
01 WS-ZONENUM11-RED REDEFINES WS-ZONENUM11 
            PIC 9(09)V99. 

01 WS-AMT-OUT       PIC -9(009).99. 

01 WS0900-AMT-IN    COMP-3 PIC S9(009)V99. 
01 WS0900-AMT-IN-RED REDEFINES     
     WS0900-AMT-IN    PIC X(006). 


MOVE WS0900-AMT-IN-RED   TO WS-WS0900-AMT-IN. 
MOVE WS-ZONEX5NM    TO WS-ZONE9NUM.   
MOVE WS-ZONEX1NM    TO WS-ZONE2NUM.   

MOVE WS-ZONENUM11-RED   TO WS-AMT-OUT. 

WS-АМТ-OUT теперь отображается как _00000020.00 где _ это знак (знак здесь будет всегда пустой, так как он не был в поле бинарного сумма.

+0

Откуда вы получаете WS0900-AMT-IN? Какой компилятор вы используете? Зачем использовать REDEFINES там? Нет необходимости, и, строго, у вас есть перекрывающиеся поля, и результат этого MOVE «неопределен», хотя он может работать на вашем конкретном компиляторе (это может быть не с другим). Вы не показываете определения полей ZONEX. У вас на самом деле есть BCD, как в этом недавнем вопросе: http://stackoverflow.com/q/37058303/1927206? Без ответов я действительно не думаю, что ваш код делает то, что, по вашему мнению, он делает. –

+0

ws0900-amt-in поступает из другой системы (Tandem), возможно, используя язык TAL, не уверен. – user3127986

 Смежные вопросы

  • Нет связанных вопросов^_^