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 に答える