您好,每年新年快乐。 我有以下问题。 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。
有谁知道如何克服这个问题?
提前致谢。
利亚
答案 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.
希望它有所帮助。