How to write character type number with points

Mtok picture Mtok · Apr 22, 2013 · Viewed 16.3k times · Source

I am holding the number in character format in abap. Because I have to take the minus from right to left. So I have to put the number to character and shift or using function 'CLOI_PUT_SIGN_IN_FRONT' I'm moving minus character to left.

But after assigning number to character it doesnt hold the points. I mean my number is;

  • 1.432- (as integer)
  • -1432 (as character)

I want;

  • -1.432 (as character)

is there a shortcut for this or should I append some string operations.

Edit:

Here is what I'm doing now.

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.

Answer

vwegert picture vwegert · Apr 22, 2013

If you're on a recent release, you could use string templates - you'll have to add some black magic to use a country that confoirms to your decimal settings, though:

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.

In this case, you need a country code to pass to the COUNTRY parameter as described in the format options. The values of the individual fields, namely T005X-XDEZP are described in detail in the country-specific formats.

tl;dr = Find any country where they use "." as a thousands separator and "," as a decimal separator and use that country settings to format the number.


You could also use classic formatting templates, but they are hard to handle unless you have a fixed-length output value:

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.