Как я могу преобразовать буквенно-цифровой и использовать его для расчета? - PullRequest
0 голосов
/ 27 июля 2011

Я прочитаю последовательный файл, который содержит некоторую строку, такую ​​как "79.85", "1000", "212.34".

Я хочу преобразовать буквенно-цифровой код в число в этом формате 00000.00?

Мне нужно сложить эти числа и переместить их в поле в формате 0000000.00.

Я попытался:

01 WS_AMOUNT_TXT                                PIC X(8).
01 WS_AMOUNT                                    PIC 9(5).9(2).

MOVE WS_AMOUNT_TXT(1:8) TO WS_AMOUNT(1:8).

То, что я получил, неожиданно, строка такая же, кактак же.Выравнивание по левому краю и отсутствие начального нуля.

Как сделать так, чтобы он выровнялся по правому краю и имел начальный ноль?

РЕДАКТИРОВАТЬ: я попробовал предложение NealB, и оно, к сожалению, не удалось:

01 WS_AMOUNT_NUM                                PIC 9(5)V9(2).
01 WS_AMOUNT_DISPLAY                            PIC 9(5).9(2).
01 WS_AMOUNT_TXT                                PIC X(8).


        DISPLAY WS_AMOUNT_TXT

        COMPUTE WS_AMOUNT_NUM = FUNCTION NUMVAL (WS_AMOUNT_TXT)
        MOVE WS_AMOUNT_NUM TO WS_AMOUNT_DISPLAY

79.85 << это то, что было отображено, когда я позвонил DISPLAY WS_AMOUNT_TXT И ПОТОМ ОНА СТАЛА.</p>

% Недопустимый аргумент COB-F-NUMVALARGINV, NUMVAL или NUMVAL-C% TRACE-F-TRACEBACK, дамп символического стека следует за обычной строкой модуля изображения, относящейся к ПК abs PC DEC $ COBRTL 0 000000000001F2B8 000000007C2F72B8 DEC $ COBRT 0 0000000000 064 $ COBRT000000007C2EC764 декабря $ COBRTL 0 0000000000014C44 000000007C2ECC44 DAILY_SPLIT_REFUND_ADJ DAILY_SPLIT_REFUND_ADJ DAILY_SPLIT_REFUND_ADJ 121 00000000000003C4 00000000000303C4 DAILY_SPLIT_REFUND_ADJ 0 00000000000313A0 00000000000313A0 0 FFFFFFFF80271EF4 FFFFFFFF80271EF4

Ответы [ 2 ]

3 голосов
/ 27 июля 2011

Попробуйте использовать встроенную функцию NUMVAL , чтобы выполнить преобразование.Что-то вроде ...

    01 WS-AMOUNT-TEXT     PIC X(8).  
    01 WS-AMOUNT-NUM      PIC 9(5)V9(2).  
    01 WS-AMOUNT-DISPLAY  PIC 9(5).9(2).  

    COMPUTE WS-AMOUNT-NUM = FUNCTION NUMVAL (WS-AMOUNT-TEXT)  
    MOVE WS-AMOUNT-NUM TO WS-AMOUNT-DISPLAY  

NUMVAL преобразует текстовое представление числа в числовой тип.Используйте числовой тип данных: PIC 9(5)V9(2) в своих расчетах.Затем используйте MOVE для преобразования числового результата в отображаемую сумму с явным десятичным знаком.

Примечание. Если требуется выполнить много вычислений, лучше использовать тип данных PACKED-DECIMAL дляповысить эффективность.

0 голосов
/ 16 января 2017

Используйте переопределение.

01 WS-AMOUNT-TXT-GRP. 03 WS-AMOUNT PIC X (4). 01 WS-AMOUNT-NUM ПЕРЕПИСЫВАЕТ WS-AMOUNT-TXT-GRP PIC 9 (4).

После повторного присвоения значения лицензии в WS-AMOUNT-TXT-GRP или в WS-AMOUNT значение автоматически будет реплицировано в WS-AMOUNT-NUM

...