如何在不丢失逗号的情况下进行类型转换?

How to do typecasting without loosing a comma?

任务: 我有 data col(30) TYPE c VALUE '-1111,45'. 我需要检查这个值是否为负数,如果为负数 - 进行类型转换。但是在输出上我得到 5 虽然我必须得到 1111,45 没有减号,然后再次对以前的类型 (с) 进行类型转换。

REPORT Z_CAST.

data col(30) TYPE c VALUE '-1111,45'. 
data numc type n.

numc = col.

  if numc < 0.
    numc = -1 * numc.
  endif.

col = numc.

WRITE col.  "Output: 5
REPORT Z_CAST.

data col(30) TYPE c VALUE '-1111,45'.

if col+0(1) EQ '-'.

  WRITE col+1. "1111,45

endif.

这是最小的字符处理方式:

col = replace( val  = col
               sub  = '-'
               with = ' ' ).

您不必先找到 - 来替换它。

这是ABAPer通常会选择的干净数字方式:

DATA n TYPE p LENGTH 12 DECIMALS 2.
n = col.
n = abs( n ).

请注意,这 不适用于您的示例 '-1111,45' 不过:ABAP 需要点 . 作为小数点分隔符,但您的号码使用本地化格式为逗号 ,,因此您必须先将数字标准化。