我在abap中持有字符格式的数字。因为我必须从右到左采取负数。所以我必须将数字设置为字符并移位或使用函数'CLOI_PUT_SIGN_IN_FRONT'我将减去字符向左移动。
但是在为角色分配号码之后它并没有持有积分。我的意思是我的号码是;
我想要;
是否有一个快捷方式,或者我应该附加一些字符串操作。
修改
以下是我现在正在做的事情。
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.
答案 0 :(得分:5)
如果您使用的是最新版本,则可以使用string templates - 您必须添加一些黑魔法来使用与您的小数设置相符的国家/地区,但是:
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中所述。 country-specific formats中详细描述了各个字段的值,即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.
答案 1 :(得分: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.
由于使用千位分隔符自动打印整数,因此您可以直接使用WRITE TO
将它们直接输出到char数据对象,而无需添加..... lol
答案 2 :(得分: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.
这将按指定打印您的整数。在此过程中必须明显转换为货币。