经常会在开发中判断输入的字串是否为数字的情况,比如上载文件中如果有金额、数量的时候,如果不做判断就直接将非数字的字串赋值给quan类型的变量会导致dump。下面将数字的判断方式做一下汇总:
1, 捕捉异常(exception)
可以通过捕捉exception来判断赋值是否成功,可以判断整数和带小数的数字。
- CX_SY_CONVERSION_NO_NUMBER
- 系统异常 SYSTEM-EXCEPTIONS CONVERSION_ERRORS (这个语法已经废弃,仅供参考)
CX_SY_CONVERSION_NO_NUMBER代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
DATA:g_p TYPE p DECIMALS 3, g_c TYPE c LENGTH 10, g_error TYPE REF TO cx_root, g_message TYPE string. g_c = 'XXXX'. TRY. g_p = g_c. CATCH cx_sy_conversion_no_number INTO g_error. g_message = g_error->get_longtext( ). MESSAGE g_message TYPE 'S' DISPLAY LIKE 'E'. ENDTRY. |
运行如下:
SYSTEM-EXCEPTIONS CONVERSION_ERRORS 代码:
1 2 3 4 5 6 7 8 9 10 11 12 |
DATA: g_int TYPE i, g_str TYPE string. g_str = 'ddd'. CATCH SYSTEM-EXCEPTIONS conversion_errors = 1. MOVE g_str TO g_int. ENDCATCH. IF sy-subrc <> 0. MESSAGE '请输入数字!' TYPE 'E'. ENDIF. |
2, 函数CY_IS_INTEGER
可以通过函数CY_IS_INTEGER判断是否是整数,有小数的数字不用用此函数判断。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
DATA: g_value TYPE i, g_string TYPE char10. g_string = '1.2'. CALL FUNCTION 'CY_IS_INTEGER' EXPORTING string_to_be_checked = g_string IMPORTING checked_value = g_value value_as_string = g_string EXCEPTIONS not_an_integer = 1 OTHERS = 2. IF sy-subrc = 0. WRITE:/'你输入的是整数:',g_value. ELSE. WRITE:/ '你输入的不是整数:',g_string. ENDIF. |
运行结果:
3, 函数NUMERIC_CHECK
只能判断整数数字。
代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
DATA:g_str1(20) TYPE c, g_st1(20) TYPE c, g_st2(4) TYPE c. g_str1 = '12.05'. CALL FUNCTION 'NUMERIC_CHECK' EXPORTING string_in = g_str1 IMPORTING string_out = g_st1 htype = g_st2. IF g_st2 = 'NUMC'. WRITE:/ '输入的是数字!'. ELSEIF g_st2 = 'CHAR'. WRITE:/ '输入的是字符!'. ENDIF. |
4, 函数CATS_NUMERIC_INPUT_CHECK
这个可以判断带小数的数字,
代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
CALL FUNCTION 'CATS_NUMERIC_INPUT_CHECK' EXPORTING INPUT = '4.8' * INTERNAL = 'X' * IMPORTING * OUTPUT = OUTPUT EXCEPTIONS NO_NUMERIC = 1 OTHERS = 2. IF SY-SUBRC = 0. WRITE:/'你输入的是数字.'. ELSE. WRITE:/ '你输入的不是数字.'. ENDIF. |
需要注意的是,每个用户的小数点设置可能不同,需要到SU3中查看一下小数点设定,
tcode:SU3
以上。
19 条评论