在ABAP

时间:2018-01-10 11:14:59

标签: sap abap

您好,每年新年快乐。 我有以下问题。 ITAB中的char字段(wfile-dmbtr(18))包含一个金额,我想进行以下检查:

如果wfile-dmbtr< 0.00

为此,我编写以下代码:

data: lv_dmbtr(18) type n.    
write wfile-dmbtr to lv_dmbtr.
replace first occurrence of '.' in lv_dmbtr with ''.
translate lv_dmbtr using ',.'.
if lv_dmbtr <= '0.00'.

问题是0.01到0.49之间的值。该程序最有可能将它们舍入为0并返回True。

金额在wfile-dmbtr中的以下掩码中:12.235,99。

有谁知道如何克服这个问题?

提前致谢。

利亚

1 个答案:

答案 0 :(得分:4)

利亚。祝你新年快乐。

类型N不允许使用小数(即使您强制使用此值,也可以在调试器中看到它)。这就是为什么数字被舍入并且条件评估'似乎'失败的原因。

此外,在进行数字转换/格式化之后,最好使用十进制类型变量来进行条件评估(例如数据元素MAXBT的类型)。

示例:

DATA: lv_dmbtr(18) TYPE c,       " Used to be type N instead of pure CHAR.
      lv_aux       TYPE maxbt.


WRITE '0,01' TO lv_dmbtr.
REPLACE FIRST OCCURRENCE OF '.' IN lv_dmbtr WITH ''.
TRANSLATE lv_dmbtr USING ',.'.
CONDENSE lv_dmbtr.

lv_aux = lv_dmbtr.

IF lv_aux <= '0.00'.

  BREAK-POINT.

ELSE.

  BREAK-POINT.    " It should enter this bracket for the value 0,01

ENDIF.

希望它有所帮助。