У меня есть следующий фрагмент кода. Я хочу отформатировать числа с помощью строковых шаблонов. Одна переменная имеет 2 знака после запятой, другая 4 знака после запятой, но они представляют одно и то же число 50000 (пятьдесят тысяч).
Первое число имеет правильный формат (немецкое представление) 50.000,00
, второе же число отформатировано как 5 миллионов 5.000.000,00
!
DATA: lv_p2 TYPE p LENGTH 9 DECIMALS 2,
lv_p4 TYPE p LENGTH 14 DECIMALS 4.
START-OF-SELECTION.
lv_p2 = '50000'.
lv_p4 = lv_p2.
SET COUNTRY 'DE'.
"This is correctly formatted as 50.000,00
WRITE |{ lv_p2 NUMBER = ENVIRONMENT CURRENCY = 'EUR' }|.
"This is on the other hand interpreted as five million! 5.000.000,00
WRITE |{ lv_p4 NUMBER = ENVIRONMENT CURRENCY = 'EUR' }|.
Это где-то задокументировано? Что я здесь делаю неправильно?
Обновлено:
Похоже проблема с дополнением CURRENCY
. Если я его не использую, то число правильно отформатировано.
WRITE |{ lv_p4 NUMBER = ENVIRONMENT }|.
или WRITE |{ lv_p4 NUMBER = ENVIRONMENT DECIMALS = 2 }|
.
В любом случае похоже на какой-то баг.
Я считаю, что это поведение задокументировано.
Документация ABAP - WRITE, format_options - CURRENCY cur
Когда добавляется ВАЛЮТА:
«Для объектов данных типа p десятичные разряды, определяемые определение типа данных полностью игнорируется. Независимо от фактическое значение и без округления, десятичных разделителей и разделители тысяч вставлены между цифрами в местах определяется кур».
Кратко: если ВАЛЮТА добавлена (записью), количество знаков после запятой определяется валютой (в этом случае у евро 2 знака после запятой), поэтому значение 50.000.0000 будет равно 5.000.000,00. Одинаковая длина (9 цифр), отличается только количество десятичных знаков.
SAP всегда хранит суммы проводок в базе данных с двумя знаками после запятой (независимо от количества знаков после запятой в валюте - 2 знака после запятой являются стандартными, но есть валюты без знака после запятой), поэтому я также следую этому в своих программах ABAP. , объявите поля валюты с двумя десятичными знаками.
поэтому мы должны преобразовать в правильный десятичный формат, прежде чем использовать добавление ВАЛЮТЫ? каков правильный путь?