Преобразование распакованных упакованных десятичных данных Comp-3 в двойные

У меня есть текстовый файл фиксированной ширины, который был распакован из данных Comp-3 в строки фиксированной ширины.

Мне нужно знать, как интерпретировать следующие поля:

FIELD-NAME-1 PIC S9(15)V9(3) COMP-3.
FIELD-NAME-2 PIC S9(3)V9(8) COMP-3.
FIELD-NAME-3 PIC S9(3)V9(6) COMP-3.

Они появляются в моем плоском файле как:

FIELD-NAME-1 0123456789123456780
FIELD-NAME-2 01234567890
FIELD-NAME-3 012345670

Мне нужно знать, какие цифры будут представлены выше.

Это правильно:

FIELD-NAME-1 123456789123456.780  --> The first 0 means +ve?
FIELD-NAME-2 012.34567890
FIELD-NAME-3 012.345670

Спасибо за помощь. ветчина

1 ответ

Решение

S9(15)V9(3) требует 19 nybbles (20 в действительности, поскольку он должен составлять четное количество nybbles) для хранения:

  • один для знака.
  • 15 для целого бита.
  • 3 для нецелого бита (V подразумевается десятичный, а не вещественный).

Знак обычно появляется в конце как C или D nybble, так что ответ на этот вопрос полностью зависит от того, что сделала распаковка.

Ваш первый пример на самом деле имеет правильное количество цифр без знака, поэтому я буду обеспокоен вашим утверждением, что одна из них представляет знак. Либо так, либо вы остановились на "9". В двух других примерах достаточно цифр как для знака, так и для числовой части.

Лучшая ставка, посмотрите, можете ли вы ввести туда отрицательное число (и другие тестовые данные, например, 1), чтобы увидеть, что оно генерирует.

Другие вопросы по тегам