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.