如何写左边有符号和千分隔点的数字



我在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.

如果你在最近的版本中,你可以使用字符串模板-你必须添加一些黑魔法才能使用一个符合你的十进制设置的国家:

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.

我终于找到了另一种方法:

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.

由于整数是用千位分隔符自动打印的,所以您可以简单地直接使用WRITE TO将它们输出到一个char数据对象,而不需要任何附加项。。。。。lol

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.

这将按指定打印您的整数。在这个过程中必须明显地转换成一种货币。

相关内容

  • 没有找到相关文章

最新更新