如何用点写字符类型号

Mto*_*tok 4 sap abap

我在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.
Run Code Online (Sandbox Code Playgroud)

vwe*_*ert 5

如果您正在使用最新版本,则可以使用字符串模板 - 您必须添加一些黑魔法才能使用与您的小数设置相符的国家/地区:

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.
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您需要使用国家/地区代码传递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.
Run Code Online (Sandbox Code Playgroud)

  • @Mtok第二种方式要小心.正如vwegert所说,如果你的数字超过6位(或小于4位数),你的输出就会搞砸:P (2认同)