DATA: lv_temp TYPE string,
lv_len TYPE i,
lv_decimal TYPE string,
lv_integer TYPE string.
lv_temp = cv_number_str.
CONDENSE lv_temp.
" 检查是否包含小数点
IF lv_temp CA '.'.
" 分割整数部分和小数部分
SPLIT lv_temp AT '.' INTO lv_integer lv_decimal.
" 去除小数部分末尾的零
DO.
lv_len = strlen( lv_decimal ).
IF lv_len = 0.
EXIT.
ENDIF.
lv_len = lv_len - 1.
IF lv_decimal+lv_len(1) = '0'.
lv_decimal = lv_decimal+0(lv_len).
ELSE.
EXIT.
ENDIF.
ENDDO.
" 重新组合
IF lv_decimal IS NOT INITIAL.
cv_number_str = lv_integer && '.' && lv_decimal.
ELSE.
cv_number_str = lv_integer.
ENDIF.
ENDIF.
这段ABAP代码的主要功能是处理数字字符串,去除小数部分末尾多余的零。以下是代码的详细解析:
代码逻辑说明
-
初始化变量:
lv_temp:临时存储输入的字符串lv_len:用于记录字符串长度lv_decimal:存储小数部分lv_integer:存储整数部分
-
预处理:
lv_temp = cv_number_str. CONDENSE lv_temp.- 将输入字符串赋值给临时变量
- 使用
CONDENSE去除字符串中的多余空格
-
检查小数点:
IF lv_temp CA '.'.- 通过
CA '.'检查字符串是否包含小数点
- 通过
-
分割整数与小数部分:
SPLIT lv_temp AT '.' INTO lv_integer lv_decimal.- 以小数点作为分隔符,将字符串拆分为整数部分和小数部分
-
去除小数部分末尾的零:
DO. lv_len = strlen( lv_decimal ). IF lv_len = 0. EXIT. ENDIF. lv_len = lv_len - 1. IF lv_decimal+lv_len(1) = '0'. lv_decimal = lv_decimal+0(lv_len). ELSE. EXIT. ENDIF. ENDDO.- 循环检查小数部分的最后一个字符
- 如果是
0则移除,直到遇到非零字符或字符串为空时退出循环
-
重组结果:
IF lv_decimal IS NOT INITIAL. cv_number_str = lv_integer && '.' && lv_decimal. ELSE. cv_number_str = lv_integer. ENDIF.- 若小数部分非空,则拼接整数部分和小数部分
- 若小数部分为空(全被移除),则仅保留整数部分
功能示例
假设输入 cv_number_str = '123.4500':
- 分割后:
lv_integer = '123',lv_decimal = '4500' - 循环移除末尾零:
'4500' → '450' → '45' - 结果重组:
'123.45'
注意事项
- 此代码仅处理包含小数点的数字字符串
- 若输入为整数(如
'123'),则直接跳过处理 - 通过
CONDENSE确保字符串无多余空格,避免分割错误

429

被折叠的 条评论
为什么被折叠?



