5

我在abap中以字符格式保存数字。因为我必须从右到左取减号。所以我必须把数字放到字符上并移位或使用函数'CLOI_PUT_SIGN_IN_FRONT'我将减号字符向左移动。

但是在为角色分配数字之后,它就没有积分了。我的意思是我的号码是;

  • 1.432-(整数)
  • -1432(作为角色)

我想;

  • -1.432(作为角色)

是否有一个快捷方式或者我应该附加一些字符串操作。

编辑:

这就是我现在正在做的事情。

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.
4

3 回答 3

6

如果您使用的是最新版本,则可以使用字符串模板- 但是,您必须添加一些黑魔法才能使用符合您的十进制设置的国家/地区:

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中所述的参数。各个字段的值,即在国家特定格式中详细描述。T005X-XDEZP

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.
于 2013-04-22T11:28:36.563 回答
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,无需添加......哈哈

于 2013-04-22T20:18:22.540 回答
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.

这将按照指定打印您的整数。在此过程中必须明显转换为货币。

于 2013-04-22T08:22:36.463 回答