Ankündigung

Einklappen
Keine Ankündigung bisher.

Formatierung von Strings

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Formatierung von Strings

    Hallo,

    folgendes Grundproblem:
    --
    Ich habe ein Text-Eingabefeld für z.b. Einkaufspreis
    Die Eingabe des Users koennte wie folgt aussehen:
    - 123
    - 123,99

    - 1.234
    - 1234

    - 1.234,99
    - 1234,99

    soviel zu den moeglichen Eingaben des Users.
    Da ich das ganze in MySQL speichere sollte der String in das MySQL-Float format umformatiert werden
    (Format: XXXXX.YY)

    Ich habe jetzt ne Weile rumexperimentiert, aber eine Loesung die Sauber funktioniert und alle Fälle abdeckt kam dabie nicht raus (mein ansatz ging über COUNT des Strings sowie ein geschachteltes EXPLODE)

    So, jetzt die Frage:
    --
    wie loese ich sowas am besten, elegantesten ?


    Gruss
    fidel_


    ok, ich koennte es so machen, aber der ansatz wirkt auf mich etwas zu kompliziert
    PHP-Code:
    <?php
    // Mein test-string
    $text "1.234,99";
    // gib Basis aus:
    echo $text."
    "
    ;
    // Check ok ein Punkt enthalten ist
    $check strpos ($text".");
    if (
    $check == false
    {     
        
    // Kein Punkt
        // ok wir haben einen String ohne Tausender Punkt
        //
        //Check ob Komma vorhanden
        
    $check strpos ($text",");
        if (
    $check == false
        {
            
    // kein Komma
            
    echo $text."
    "
    ;
        }
        else
            {
            
    // Komma
               // nun Komma durch Punkt ersetzten
            
    $text_array=explode(","$text);
            
    $text =$text_array[0].".".$text_array[1];
            echo 
    $text."
    "
    ;
            }
        }
        else
        {
            
    // Treffer
            // Wir werden den Punkt los
            
    $text str_replace("."""$text); 
            echo 
    $text."
    "
    ;
            
    // ok wir haben einen String ohne Tausender Punkt
            //
            //
            // check ob Komma
            
    $check strpos ($text",");
            if (
    $check == false
            {
                
    // kein Komma
                
    echo $text."
    "
    ;        
            }
            else
            {
                   
    // Komma
                // nun Komma durch Punkt ersetzten
                
    $text_array=explode(","$text);
                
    $text =$text_array[0].".".$text_array[1];
                echo 
    $text."
    "
    ;
            }
    }

  • #2
    PHP-Code:
    <?php
    $zahl 
    sprintf('%08.2f'strtr($zahl',''.'));
    ?>

    Kommentar


    • #3
      in deinem Code fehlt ne Klammer fidel

      @karl: is ja ganz schön wenig im gegensatz zum ersten code lol

      mfg niedi
      http://forum.developers-guide.net

      Klick dich REICH:
      http://www.klick-reich.de/index2.php...lden&ref=Niedi

      Kommentar


      • #4
        Wird aber nicht funktionieren sofern die Zahl im String mit Komma vorliegt. Also z.B. 230,45 gibt mit deiner Funkton 230.00 aus.
        Mit Tausender-Beträgen die mit Punkt getrennt sind funktioniert es erst recht nicht.

        Ich denke bei dieser Art wäre es am Einfachsten das so zu machen:

        $zahl = 4.342,53;

        $zahl = str_replace('.','',$zahl); // entfernt Tausender-Punkt
        $zahl = str_replace(',','.',$zahl); // Ersetzt Komma durch Punkt für DB

        heraus käme wie gewünscht: 4342.53

        Kommentar


        • #5
          @ karl:
          sieht schoen kurz aus, aber:
          PHP-Code:
          <?php
          test mal folgendes
          :
          $zahl "4.567,99";
          $zahl sprintf('%08.2f'strtr($zahl',''.'));
          echo 
          $zahl."
          "

          ?>
          und du kriegst: 00004.57 hehe


          @Niedi:
          was wie wo ?

          Kommentar


          • #6
            sorry, hatte den dezimalpunkt übersehen, dann ändere das so:
            PHP-Code:
            <?php
            $zahl 
            sprintf('%.2f'strtr(str_replace('.','',$zahl),',','.'));
            ?>
            /edit: gerade wolltest du doch noch das format XXXXX.YY, drum hab ichs mal mit nullen aufgefüllt, jetzt läufts hoffentlich so, wie dus willst, wenn du auch nun keine nachkommastellen willst dann machs so:
            PHP-Code:
            <?php
            $zahl 
            strtr(str_replace('.','',$zahl),',','.');
            ?>

            Kommentar


            • #7
              ups, dann hab ich mich falsch ausgedrückt.


              funktioniert 1a, und der code ist auch "etwas" überschaubarer hrhr


              danke
              gruss
              fidel_

              Kommentar


              • #8
                *wiederauspack*

                habe mich aufgrund bekannter Float-Problematiken in MySQL entschieden meine Preise vortan als INT zu speichern.
                d.h. die Werte werden in Cent umgerechnet und somit ist kein Feld-Typ Float mehr von Nöten.

                nun bin ich wieder am Formatierungspunkt.

                Der User kann ja in folgenden Formaten eingaben hinterlassen.
                ---
                9,99
                9,9

                1.000,99
                1.000,9

                1000,9
                1000,99
                --
                Sollten die Varianten sein.

                Habe inzwischen diverse Befehle zur Zeichenerkennung & Ersetzung (str_replace, explode, number_format, ereg...) kennengelernt
                aber die Frage stellt sich, wie gehe ich das am besten an, ohne grossen unnötigen Code zu produzieren.

                Ziel:
                --
                - Eingabe aufnehmen
                - Punkt und Komma entfernen
                (geht einfach mit str_replace, deckt aber die anzahl der mögl. Nachkommastellen nicht ab)
                -> finalen Cent Betrag erhalten (ggf. x 100 aber nur in bestimmten Fällen bei keiner Nachkommastelle)

                Ideen ? Ansätze ?

                Gruss
                fidel

                Kommentar


                • #9
                  ist doch irgendwie schwachsinnig:

                  Willst du darüber spekulieren,
                  was mit einem INPUT im Format "1.2,34.5.6,78,,9"
                  wohl gemeint sein kann?
                  Und diesen dann irgendwie 'passend' machen?
                  Und dann auch noch glauben,
                  daß das, was du daraus machst, richtig ist,
                  auch das ist, was der 'Eingeber' gemeint hat???

                  ~dilemma~

                  Irgendwie versteh ich soleche Fragen wohl nicht.

                  Kommentar


                  • #10
                    oehm willst du einfach sagen:

                    USER du darfst nur SO und EXAKT SO Eingaben erfassen ?

                    Oder was schwebt dir Alternativ vor ?
                    Du magst die Frage nicht verstehen, ich nicht deinen nichtgenannten Alternativ-weg

                    Kommentar


                    • #11
                      Was sind denn bekannte FLOAT-Problematiken? Setze den Datentyp nie ein deshalb frage ich...

                      Wie wärs wenn du dem User garnicht erst einen Punkt als tausender-Trennzeichen erlaubst?


                      Edit: Ich sehe es wie dilemma, bei Sachen wie Geld muss man einfach eindeutige Werte empfangen und nicht rumspekulieren was er meint.

                      Kommentar


                      • #12
                        Mein Weg:
                        --
                        $zahl = "450,01";
                        // Step 1: Punkt löschen, sofern erfoderlich
                        $zahl = str_replace( '.', '', $zahl);
                        // Step 2: Komma durch Punkt ersetzten
                        $zahl = str_replace( ',', '.', $zahl);
                        // Step 3: In Cent wandeln
                        $zahl = $zahl * 100;
                        --

                        Zergling:
                        ich hab bis dato ca. 500 Sätze in der DB. JEder mit einem EK Preis als FLoat ( bis gestern).
                        Hatte den interessanten Punkt das sich ein (einzelner) EK Preis weder über die Applikation noch über das dumme phpmyadmin editierne lies.

                        bsp:
                        123456,41
                        ich editier zu
                        123456,40
                        --> gesaved ist
                        123456,41

                        wie gesagt sowohl in der applikation als auch phpmyadmin.
                        Google-Suche und in div. #php channels wirst desöftern hören das man Preise wohl immer als INT saven sollte. Hatte bis dato auch keine probleme mit floats.
                        naja, solved & can be closed now


                        gruss
                        fidel

                        Kommentar

                        Lädt...
                        X