有时候使用Excel批导。
用户维护Excel的数字格式的时候,有时候是手动输入,有的是从别的系统导出来的。
数字格式可能有:
123,456.00
123.456,00
123456.00
123456,00
甚至奇葩点儿:123,456(没有小数点及小数位)
而咱们系统里赋值的时候,前台输入跟你su3设置有关。
但是debug的时候,你回发现,在运行时小数点就是(.)点儿。
所以为了规范格式,自己写了段代码,将输入的数字转换为 1234.00 这种格式
效果
FUNCTION ZLM_FORMAT_DECIMAL .
*"----------------------------------------------------------------------
*"*"Local Interface:
*" CHANGING
*" REFERENCE(CV_VALUE)
*"----------------------------------------------------------------------
DATA :LV_LEN TYPE INT4 .
DATA :LV_TMP TYPE INT4 .
DATA :LV_DEC TYPE CHAR1 .
LV_LEN = STRLEN ( CV_VALUE ) .
IF LV_LEN > 7 . "1,100.00
LV_TMP = LV_LEN - 7 .
IF CV_VALUE LV_TMP ( 1 ) CO ',.' .
LV_DEC = CV_VALUE LV_TMP ( 1 ) .
REPLACE ALL OCCURRENCES OF LV_DEC IN CV_VALUE WITH '' .
CONDENSE CV_VALUE NO -GAPS .
ENDIF .
ENDIF .
LV_LEN = STRLEN ( CV_VALUE ) .
IF LV_LEN > 4 . "1,100
LV_TMP = LV_LEN - 4 .
IF CV_VALUE LV_TMP ( 1 ) CO ',.' .
LV_DEC = CV_VALUE LV_TMP ( 1 ) .
REPLACE ALL OCCURRENCES OF LV_DEC IN CV_VALUE WITH '' .
CONDENSE CV_VALUE NO -GAPS .
ENDIF .
ENDIF .
LV_LEN = STRLEN ( CV_VALUE ) .
IF LV_LEN > 3 . "100.00
LV_TMP = LV_LEN - 3 .
LV_DEC = CV_VALUE LV_TMP ( 1 ) .
IF LV_DEC CO ',.' .
REPLACE ALL OCCURRENCES OF LV_DEC IN CV_VALUE WITH '.' .
ENDIF .
ENDIF .
ENDFUNCTION .
当然,我这里是只针对只有两位小数位的,比如金额,对于三位小数位的,自己改下就行了
可能是有标准函数或者其他方法能做这个,我懒得找了,索性自己随手写了这么一个,可能有bug,遇到了再说吧
欢迎关注订阅号:SAP学习记录 (SAPlearning )