Code: Alles auswählen.
DATA: len TYPE i,
part1 LIKE gv_string1,
part2 LIKE gv_string1.
CHECK p_str IS NOT INITIAL.
REPLACE ',' IN p_str WITH ''.
REPLACE ALL OCCURRENCES OF '.' IN p_str WITH ''.
len = strlen( p_str ).
len = len - 2.
part1 = p_str(len).
part2 = p_str+len(2).
CONCATENATE part1 '.' part2 INTO p_str.
Code: Alles auswählen.
data lf_dcpfm type XUDCPFM.
SELECT SINGLE dcpfm FROM usr01
INTO lf_dcpfm
WHERE bname EQ sy-uname.
IF lf_dcpfm IS INITIAL. "German format
REPLACE '.' IN p_str WITH ''.
REPLACE ',' IN p_str WITH '.'.
ELSEIF lf_dcpfm EQ 'X'. "English Format
REPLACE ',' IN p_str WITH ''.
ENDIF.
Jedoch mehr als 2 Kommastellen verursachen einen Fehler.replace all occurrences of regex '(\d)[,\.](\d)\z' in l_string with '$1.$2\0'.
replace all occurrences of regex '(\d*)(\D*)' in l_string with '$1'.
replace all occurrences of regex '(\d\d)\z' in l_string with '.$1'.
Weil das ein unanständiges Wort im englischen ist!Barney hat geschrieben:Dele hat geschrieben: P.S.: Wieso macht die Forensoftware aus dem Wort D_ONG >>SPAM<<?
Ich fürchte das 1. Replace funktioniert nicht, - der Punkt wird dabei in ein Leerzeichen umgewandelt. Du müsstest `` anstatt ' ' verwenden oder nachher noch ein Condense anwenden.Barney hat geschrieben:Code: Alles auswählen.
REPLACE '.' IN p_str WITH ''. REPLACE ',' IN p_str WITH '.'.
Code: Alles auswählen.
Translate p_str using ',.. '.
Condense p_str no-gaps.
Zu Deiner Befürchtung, dass der erste Replace nicht funktioniert, kann ich sagen, dass im Test mein Conding genau das gemacht hat, was tun sollte. Nun weiß ich nicht, was Du mitblack_adept hat geschrieben:Ich fürchte das 1. Replace funktioniert nicht, - der Punkt wird dabei in ein Leerzeichen umgewandelt. Du müsstest `` anstatt ' ' verwenden oder nachher noch ein Condense anwenden.Barney hat geschrieben:Code: Alles auswählen.
REPLACE '.' IN p_str WITH ''. REPLACE ',' IN p_str WITH '.'.
meintest. Vielleicht wird das im Text falsch dargestellt: ich nutze die "normalen" Hochkommata bzw. einfachen Anführungszeichen. Was wäre der Unterschied zu ´´?Du müsstest `` anstatt ' ' verwenden
Code: Alles auswählen.
CONCATENATE 'Test ' 'Test ' INTO ld_test. "= 'TestTest'
CONCATENATE `Test ` `Test ` INTO ld_test. "= `Test Test `
Code: Alles auswählen.
REPLACE '.' IN p_str WITH ''.
* ist gleich wie
REPLACE '.' IN p_str WITH ``.
Code: Alles auswählen.
REPLACE '.' IN p_str WITH ` `.
* ist NICHT gleich wie
REPLACE '.' IN p_str WITH ' '.
Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
Barney
Barney hat geschrieben:
Aber die Notwendigkeit für eine Fallunterscheidung zwischer deutsche vs. englische Notation bleibt auch hier bestehen, wenn ich das richtig sehe.
Code: Alles auswählen.
DATA lf_curr TYPE zmm_netpr_old.
DATA lf_temp_value TYPE p DECIMALS 5.
DATA lf_value TYPE p DECIMALS 5.
DATA lf_waers TYPE waers.
DATA lf_currdec TYPE currdec.
DATA lf_decimals TYPE i.
SELECT SINGLE waers FROM tcurc
INTO lf_waers
WHERE waers EQ p_waers.
IF sy-subrc IS INITIAL.
SELECT SINGLE currdec FROM tcurx
INTO lf_currdec
WHERE currkey EQ lf_waers.
IF sy-subrc IS INITIAL.
lf_decimals = 2 - lf_currdec.
ELSE.
lf_currdec = 2.
lf_decimals = 0.
ENDIF.
*--------------------------------------------------------------------*
* in the end the format of the value should be 1234567.89
*--------------------------------------------------------------------*
IF p_dcpfm IS INITIAL. "German format
TRANSLATE p_str USING ',.. '.
CONDENSE p_str NO-GAPS.
ELSEIF p_dcpfm EQ 'X'. "English format
TRANSLATE p_str USING ', '.
CONDENSE p_str NO-GAPS.
ELSEIF p_dcpfm EQ 'Y'. "whatever format
TRANSLATE p_str USING ',.'.
CONDENSE p_str NO-GAPS.
ENDIF. " IF p_dcpfm IS INITIAL.
lf_temp_value = p_str.
CATCH SYSTEM-EXCEPTIONS conversion_errors = 1.
lf_curr = lf_temp_value / 10 ** lf_decimals.
ENDCATCH.
IF sy-subrc IS INITIAL.
MOVE lf_curr TO p_str.
CONDENSE p_str NO-GAPS.
ENDIF.
ENDIF. "IF sy-subrc IS INITIAL.