Обстановка C55F+ABC

Объясните пожалуйста следующую ситуацию и способы борьбы.

 MyVar   DECIMAL(20,0)

 MyVar = 1234567891 * 2
 STOP(MyVar) ! Выдает    -1825831514

а если написать так:

 MyVar = 1234567891
 MyVar = MyVar * 2
 STOP(MyVar) !То получим  2469135782

Может кто объяснит какого ….. он преобразует DECIMAL в LONG. Все становится просто, если вспомнить из доки, что базовым типом при вычислениях (если не задан явно тип операндов) принимается LONG.
Где в твоем примере сказано, что эти операнды имеют тип, отличный от LONG? Поэтому компилятор для вычисления данного примера использует временную переменную LONG-типа для приема результата вычисления. И уже после вычисления он эту LONG-переменную преобразует в DECIMAL.
Чтобы твой пример вычислялся правильно надо написать так:

MyVar = 1234567891,00 * 2,00

Вот теперь, при вычислении, для временного хранения результата будет использована REAL-переменная. Заметь — именно REAL! Поэтому, например, для расчета суммы лучше использовать две DECIMAL-переменные. Тогда не будет потерь в копейках и общая сумма всегда сойдется.