Странное форматирование строки с 2 против 4 знаков после запятой в поле валюты

У меня есть следующий фрагмент кода. Я хочу отформатировать числа с помощью строковых шаблонов. Одна переменная имеет 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 }|.

В любом случае похоже на какой-то баг.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
149
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я считаю, что это поведение задокументировано.

Документация ABAP - WRITE, format_options - CURRENCY cur

Когда добавляется ВАЛЮТА:

«Для объектов данных типа p десятичные разряды, определяемые определение типа данных полностью игнорируется. Независимо от фактическое значение и без округления, десятичных разделителей и разделители тысяч вставлены между цифрами в местах определяется кур».

Кратко: если ВАЛЮТА добавлена ​​(записью), количество знаков после запятой определяется валютой (в этом случае у евро 2 знака после запятой), поэтому значение 50.000.0000 будет равно 5.000.000,00. Одинаковая длина (9 цифр), отличается только количество десятичных знаков.

поэтому мы должны преобразовать в правильный десятичный формат, прежде чем использовать добавление ВАЛЮТЫ? каков правильный путь?

Suncatcher 21.12.2022 00:13

SAP всегда хранит суммы проводок в базе данных с двумя знаками после запятой (независимо от количества знаков после запятой в валюте - 2 знака после запятой являются стандартными, но есть валюты без знака после запятой), поэтому я также следую этому в своих программах ABAP. , объявите поля валюты с двумя десятичными знаками.

József Szikszai 21.12.2022 09:32

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