У вас 2 проблемы.
COBOL имеет несколько числовых структур данных. У каждого свой набор правил.
Для УПАКОВАННОЙ ДЕЦИМАЛИ (КОМП-3)
• Числовые компоненты предложения PIC ВСЕГДА должны суммироваться с числом ODD.
• Десятичный маркер «V» определяет расположение десятичной точки.
• Отдельные элементы MOVE и математические функции будут поддерживать выравнивание десятичных значений - возможно как усечение высокого, так и низкого уровня.
• Преобразование числовых типов данных (десятичная зона в упакованные и двоичные в упакованные) выполняется для вас.
например. S9 (5) V9 (2) COMP-3.
в том числе 2 десятичных знака>
Длина рассчитывается как ROUND UP [(7 + 1) / 2] = 4 байта
S9(6)V9(2) COMP-3.
включая 2 десятичных знака>
Длина рассчитывается как ROUND UP [(8 + 1) / 2] = 5 байтов
Но 1 ½ байта не адресуется
Последний ½ байта полей COMP-3 является шестнадцатеричным представлением знака.
Значения знака ½ байта: C = положительный знак D = отрицательный знак F = без знака (не COBOL).
S9 (6) V9 (3) COMP-3 ЗНАЧЕНИЕ 123.45.
Длина рассчитывается как ROUND UP [(9 + 1) / 2] = 5 байтов
Содержит X’00 01 23 45 0C ’
Обратите внимание на десятичное выравнивание и заполнение нулями.
Правила MOVE на уровне группы
COBOL Структуры полей данных определяются как иерархические структуры.
Поле группы 01 H-L - & любое поле уровня подгруппы -
- Почти всегда подразумеваемое строковое значение CHARACTER
- Если поле отдельного элемента имеет уровень 01 или 77 - оно может быть числовым.
- Поля отдельных элементов, определенные как числовые значения на уровне группы или подгруппы, будут обрабатываться как числовые, если на них ссылаются как на поля отдельных элементов.
- Применяются числовые правила.
о Правильно оправдать
o десятичное место
o pad H-L (½ байта) с нулями
o Числовое преобразование типов данных
Поле приема MOVE или математических вычислений определяет, будет ли выполняться преобразование числовых данных.
Числовое преобразование данных
Если вы ПЕРЕМЕЩАЕТЕ или выполняете математическое вычисление, используя любой тип поля отправки (группу или элемент), к любому принимающему отдельному полю элемента, определенному с помощью предложения числового PIC ---, тогда для получающего поля будет выполнено преобразование числовых данных. S0C7 происходит, когда нечисловые данные перемещаются в принимающее численно определенное поле ИЛИ, когда математические вычисления предпринимаются с использованием нечисловых данных.
Нет преобразования числовых данных
Если вы переместите какой-либо тип поля (группу или элемент) в любое поле уровня группы или подгруппы, преобразование числовых данных НЕТ.
• Применяются правила перемещения персонажа.
• Левый Justify & pad с пробелами.
Это одна из основных причин нечисловых данных в числовом поле.
Одно из основных применений MOVE уровня отправляющей группы, содержащего поля числовых элементов, к уровню принимающей группы, содержащей поля числовых элементов (идентично сопоставленных), - для повторной инициализации полей числовых элементов с использованием 1 инструкции MOVE.
Очистка маски - или - MOVE распространения данных также возможна для очистки таблиц, где уровень группы таблиц превышает 255 байтов.