2013-04-22 2 views
4

Я держу номер в символьном формате в abap. Потому что я должен принимать минус справа налево. Поэтому я должен поместить номер в символ и сдвинуть или использовать функцию 'CLOI_PUT_SIGN_IN_FRONT' Я двигаюсь минус символ влево.Как написать номер символьного типа с точками

Но после присвоения номера персонажу он не удерживает очки. Я имею в виду мой номер;

  • 1.432- (как целое)
  • -1432 (как символ)

Я хочу;

  • -1,432 (как символ)

есть ярлык для этого, или я должен добавить некоторые строковые операции.

Edit:

Вот что я делаю сейчас.

data: mustbak_t(10) TYPE c, 
     mustbak like zsomething-menge. 

select single menge from zsomething into mustbak where something eq something. 
mustbak_t = mustbak. 

CALL FUNCTION 'CLOI_PUT_SIGN_IN_FRONT' 
    CHANGING 
    VALUE   = mustbak_t. 

write: mustbak_t. 
+1

Можем ли мы видеть код, который вы используете в настоящее время? –

+0

см. Мое редактирование. – Mtok

ответ

5

Если вы на недавний релиз, вы могли бы использовать string templates - вам придется добавить черную магию, чтобы использовать страну, которая confoirms с вашими настройками десятичных, хотя:

DATA: l_country TYPE t005x-land, 
     l_text TYPE c LENGTH 15, 
     l_num  TYPE p LENGTH 6. 

SELECT SINGLE land 
    INTO l_country 
    FROM t005x 
    WHERE xdezp = space. 

l_num = '-123456'. 
l_text = |{ l_num COUNTRY = l_country }|. 

WRITE:/l_text. 

В этом случае , вам необходимо указать код страны, чтобы перейти к параметру COUNTRY, как описано в format options. Значения отдельных полей, а именно T005X-XDEZP, подробно описаны в country-specific formats.

tl; dr = Найти любую страну, в которой они используют "." как разделитель тысяч и «,» в качестве разделителя десятичных чисел и используйте настройки этой страны для форматирования номера.


Вы также можете использовать классические шаблоны форматирования, но их трудно обрабатывать, если вы не будете иметь выходное значение фиксированной длины:

DATA: l_text TYPE c LENGTH 15, 
     l_num TYPE p LENGTH 6 DECIMALS 2. 

l_num = '-1234.56'. 
WRITE l_num TO l_text USING EDIT MASK 'RRV________.__'. 
CONDENSE l_text NO-GAPS. 

WRITE:/l_text. 
+0

не могли бы вы поделиться некоторыми подробностями о том, что это | {} | нотация (или как она называется)? никогда не встречал этого раньше. –

+0

@ vlad-ardelean Эти строковые шаблоны являются неудачными - я добавил ссылку на онлайн-документацию. – vwegert

+0

Незначительный комментарий, но пространство xdezp eq дает запятую как десятичный разделитель? – tomdemuyt

0
DATA: currency TYPE cdcurr, 
     characters(18) TYPE c, 
     ints TYPE i VALUE -200000. 

currency = ints. 
WRITE currency TO characters CURRENCY 'USD' DECIMALS 0. 
CALL FUNCTION 'CLOI_PUT_SIGN_IN_FRONT' 
    CHANGING 
    value = characters. 
. 
WRITE:/'example',characters. 

Это печатает целое число, как указано. Должно быть, очевидно, что конвертируется в валюту во время процесса.

+0

спасибо @ vlad-ardelean, но он с запятой, например -1,432. Мне нужно с точкой, -1.432 – Mtok

+0

должен работать сейчас. Я получил дефиналы по умолчанию из символов. –

+0

@Mtok также, теперь я обновил валюту, чтобы быть более понятным типом. Однако вы можете использовать любой элемент данных для домена CURR. –

1

Вот еще один способ, который я наконец-то работает:

DATA: characters(18) TYPE c, 
     ints TYPE i VALUE -222333444. 

WRITE ints TO characters. "This is it... nothing more to say. 

CALL FUNCTION 'CLOI_PUT_SIGN_IN_FRONT' 
    CHANGING 
    value = characters. 

WRITE characters. 

Поскольку целые числа автоматически печатаются с помощью разделителя тысяч, вы можете просто выводить их на объект данных char напрямую, используя WRITE TO без каких-либо подключений ..... lol

+0

это просто! он работает спасибо. – Mtok

Смежные вопросы