Ankündigung

Einklappen
Keine Ankündigung bisher.

Problem mit Zahlenformat

Einklappen

Neue Werbung 2019

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

  • Problem mit Zahlenformat

    Hallo Mädels und Buben,

    ich habe folgendes Problem. Über ein Forumar wird ein Preis in einer MySQL-db gespeichert. (Zahlenformat decimal 10.2). Nun wird diese Zahl manchmal unterschiedlich eingetragen. So z.B. 1.288,00 oder 1288,00 oder 1288 oder 1288,55.

    Im Moment habe ich die Euros und die Cents in 2 Formularfelder getrennt und den Tausenderpunkt nicht zugelassen. Das ist aber nicht die tollste Lösung. Hat hier einer eine Lösung für mich.

    Danke - Meister Eder


  • #2
    eine langer Zahl mit Fließkomma.

    dann number_format();


    z.B.: $var = number_format($var,2,",",".");
    Aufstrebend, kompetent und werbefrei.
    www.developers-guide.net

    Kommentar


    • #3
      @supertramp

      ja, das mit dem auslesen ist mir klar. Es funktioniert auch. Das eigentliche Problem ist die Eingabe des Users. Ich wollte irgendwie mit ereg_replace auslesen und die 1000er Punkte entfernen. Nur habe ich jedesmal ein Problem, wenn die Eingabe 100,00 oder nur 100 ist. Hierfür brauche ich noch einen Tip.

      Kommentar


      • #4
        mir ist noch was eingefallen. Bisher habe ich immer versucht, die eingegebene Zahl auszulesen und entsprechend einzutragen. Nun wäre es vielleicht besser, generell die Eingabe (mit javascript) zu steuern. Welche Lösung ist denn besser?

        Kommentar


        • #5
          Lege dir ein gültiges Format fest. Prüfe die Eingabe auf dieses Format. Falls beide nicht übereinstimmen, fordere den User zur Neueingabe auf. Je mehr du versuchst zu interpretieren, desto mehr Fehler können dir unterlaufen. Du musst den User dazu zwingen, das korrekte Format einzuhalten.

          Das Format muss z.B. folgende Anforderungen erfüllen:
          - ein einziges Komma erlaubt (gilt dann als Kommastelle, ein Komma verwendet niemand als Tausendertrennzeichen)
          - Vor dem Komma maximal 2 Stellen erlaubt

          Eventuell den Betrag auf einer Folgeseite nochmal detailliert dem User präsentieren, bevor er endgültig bestätigt und der Eintrag erfolgt.

          Zum Thema JavaScript:
          Da du sowieso letztendlich serverseitig prüfen musst, weil sich clientseitig durch den User tricksen lässt, würde ich dir diese Zusatzarbeit nicht empfehlen. Das macht bei ausgelasteten Servern zeitlich bedingt Sinn, aber ich glaube, das trifft auf deinen Fall nicht zu.

          Kommentar


          • #6
            Wenn die User hauptsächlich deutsche Varianten
            2,5
            1.299,9999
            -416
            + 1 200,00
            eingeben, geht das:

            Code:
            <?php
            
            $z = preg_replace('#\s|\.#', '', $z);
            $z = str_replace(',', '.', $z);
            
            if is_numeric($z)
                {
                /* ok */
                }
            
            ?>

            Kommentar


            • #7
              hallo schneiderlein,

              Danke für Deine Antwort. Darf ich das nochmal in Worte fassen.
              Ich gehe davon aus, dass das # ist ein Platzhalter ist (egal wieviele Zeichen)?
              Für was stecht \s, | ?
              Diese Zeichen werden praktisch entfernt?
              In der zweiten Zeile wird aus dem Komma ein Punkt.

              Wenn ich anschließend die Zahl dann darstellen möchte, jedoch wieder mit 1000er Punkt und Komma, funktioniert das mit printf(). Ich habe leider auch hier Probleme. Mit
              Code:
              printf('%.2f',z$)
              bekomme ich nicht das gewünschte Ergebnis. Soll ich die Zahl anschließend wieder mit ...replace ändern oder gibt es für printf() den passenden Schalter.

              Danke Meister Eder

              Kommentar


              • #8
                Ich gehe davon aus, dass das # ist ein Platzhalter ist (egal wieviele Zeichen)?
                Die # vorn und hinten begrenzen den Suchstring und könnten auch jedes andere Zeichen sein, das nicht noch einmal in diesem vorkommt.

                Für was stecht \s, | ?
                Diese Zeichen werden praktisch entfernt?
                Es heißt »\s|\.« und bedeutet »ein Whitespace (\s) ODER (|) ein Punkt (\.). Der Punkt ohne den Escaper »\« steht für jedes beliebige Zeichen.
                In der zweiten Zeile wird aus dem Komma ein Punkt.
                Richtig, weil PHP den Punkt als Dezimaltrennzeichen verwendet.

                Wenn ich anschließend die Zahl dann darstellen möchte,
                geht das z. B. mit
                Code:
                number_format($anzahl_dezimalstellen, $dezimal_trennzeichen, $tausender_trennzeichen)

                Kommentar


                • #9
                  danke, Du hast mir sehr geholfen.

                  Kommentar

                  Lädt...
                  X