я писал сам примерно так:
Code:
FUNCTION ZSD_CHAR_TO_FLOAT.
*"----------------------------------------------------------------------
*"*"Локальный интерфейс:
*" IMPORTING
*" REFERENCE(TEXT_IN) TYPE C
*" EXPORTING
*" REFERENCE(FLOAT_OUT) TYPE F
*"----------------------------------------------------------------------
DATA: TEXT_OUT(40).
IF USER_DCPFM IS INITIAL.
SELECT SINGLE DCPFM INTO USER_DCPFM
FROM USR01 WHERE BNAME = SY-UNAME.
IF SY-SUBRC = 0.
IF USER_DCPFM = ' '.
USER_DCPFM = 'Z'.
ENDIF.
ENDIF.
ENDIF.
CALL FUNCTION 'ZCHAR_TO_NUMBER'
EXPORTING
TEXT_IN = TEXT_IN
IMPORTING
TEXT_OUT = TEXT_OUT.
CASE USER_DCPFM.
WHEN 'Z'.
TRANSLATE TEXT_OUT USING '.,'.
WHEN 'Y'.
TRANSLATE TEXT_OUT USING '.,'.
WHEN 'X'.
TRANSLATE TEXT_OUT USING ',.'.
ENDCASE.
TRANSLATE TEXT_OUT USING ',.'.
FLOAT_OUT = TEXT_OUT.
ENDFUNCTION.
Code:
FUNCTION ZCHAR_TO_NUMBER.
*"----------------------------------------------------------------------
*"*"Локальный интерфейс:
*" IMPORTING
*" REFERENCE(TEXT_IN) TYPE C
*" EXPORTING
*" REFERENCE(TEXT_OUT) TYPE C
*"----------------------------------------------------------------------
DATA:TXT(255), POINT(1), COMMA(1),
PP TYPE I, CP TYPE I.
TXT = TEXT_IN.
REPLACE '.' WITH '#' INTO TXT.
SEARCH TXT FOR ','.
IF SY-SUBRC = 0.
CP = SY-FDPOS + 2.
SEARCH TXT FOR ',' STARTING AT CP.
IF SY-SUBRC = 0.
REPLACE ',' WITH ' ' INTO TXT.
ENDIF.
ENDIF.
SEARCH TXT FOR '#'.
IF SY-SUBRC = 0.
CP = SY-FDPOS + 2.
SEARCH TXT FOR '#' STARTING AT CP.
IF SY-SUBRC = 0.
REPLACE '#' WITH ' ' INTO TXT.
ENDIF.
ENDIF.
SEARCH TXT FOR ','.
IF SY-SUBRC = 0.
COMMA = 'X'.
CP = SY-FDPOS.
ENDIF.
SEARCH TXT FOR '#'.
IF SY-SUBRC = 0.
POINT = 'X'.
PP = SY-FDPOS.
ENDIF.
IF POINT = 'X' AND COMMA = 'X'.
IF CP > PP.
REPLACE '#' WITH ' ' INTO TXT.
ELSE.
REPLACE ',' WITH ' ' INTO TXT.
REPLACE '#' WITH ',' INTO TXT.
ENDIF.
ENDIF.
IF POINT = 'X' AND COMMA IS INITIAL.
REPLACE '#' WITH ',' INTO TXT.
ENDIF.
TEXT_OUT = ''.
WHILE NOT TXT IS INITIAL.
IF TXT(1) CA '0123456789,'.
CONCATENATE TEXT_OUT TXT(1) INTO TEXT_OUT.
ENDIF.
SHIFT TXT.
ENDWHILE.
IF NOT TEXT_OUT(1) CA '0123456789'.
CONCATENATE '0' TEXT_OUT INTO TEXT_OUT.
ENDIF.
ENDFUNCTION.
Расчитываю на то что из внешних систем поступает число с некими ед.изм (или без них) и с произвольным разделителем (. или ,). Вроде даже предпологал что могут быть разделители тысяч (, или . или пробел).
Могут быть ошибочки. Думать то некогда, работать надо

.