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

  • Gast-Avatar
    Ein Gast erstellte das Thema Formatierung von Strings.

    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."
    "
    ;
            }
    }

  • Gast-Avatar
    Ein Gast antwortete
    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

    Einen Kommentar schreiben:


  • Zergling-new
    antwortet
    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.

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    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

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    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.

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    *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

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    ups, dann hab ich mich falsch ausgedrückt.


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


    danke
    gruss
    fidel_

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    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),',','.');
    ?>

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    @ 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 ?

    Einen Kommentar schreiben:


  • webbi
    antwortet
    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

    Einen Kommentar schreiben:


  • Niedi
    antwortet
    in deinem Code fehlt ne Klammer fidel

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

    mfg niedi

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    PHP-Code:
    <?php
    $zahl 
    sprintf('%08.2f'strtr($zahl',''.'));
    ?>

    Einen Kommentar schreiben:

Lädt...
X