2 zwei Zahlen hinter dem Komma

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

  • 2 zwei Zahlen hinter dem Komma

    Hallo, ich bin auf der Suche nach einer Funktion die überprüft wieviel
    Zahlenfelder hinter dem Komma stehen und evtl. eine Fehlermeldung ausgibt.

    Ich meine... wenn ein User 2.445 angibt und er darf aber nur 2 Zahlen nach dem Komma angeben, so soll es eine Fehlermeldung geben.

    Es soll aber nicht gerundet werden wie bei round() oder änliches.

    Ich brauche eine Fehlermeldung das 3 und mehr Stellen hinter den Komma nicht möglich ist.

    Kann mir da jemand weiterhelfen...

    Ich danke auf jeden fall für die Antworten!
    www.CustomMaps.de, www.Kultevents.net
    www.CustomMap.de, www.Kultevent.net

  • #2
    preg_match mit der passenden RegEx

    Kommentar


    • #3
      neben der fehlermeldung kannst du dem user das ändern der eingabe ja schon vorweg nehmen, natürlich so, daß er es auch noch kontrollieren kann.
      Die Zeit hat ihre Kinder längst gefressen

      Kommentar


      • #4
        Man könnte auch einfach die Zahl runden (www.php.net/round). Das sollte allerdings mit Vorsich genossen werden, falls der Benutzer absichtlich 3 Nachkommastellen angegeben hat.
        "Ach was soll's? Dann bau ich mir halt meinen eigenen Vergnügungspark mit Blackjack und Nutten." - Bender

        Kommentar


        • #5
          Danke für die schnellen Antworten....

          Runden geht nicht, da es sich um eine EURO Währung also 0,00 EURO handelt.

          preg_match war auch schon mein Gedanke, aber leider bin ich noch nicht so lange in Sachen PHP unterwegs und komme gerade mit preg_match momentan überhaupt nicht klar...

          Die vielen Zeichen ...

          /^([0-9a-fA-F]{0,2})[-: ]?([0-9a-fA-F]{0,2})[-: ]?(
          [0-9a-fA-F]{0,2})[-: ]?([0-9a-fA-F]{0,2})[-: ]?([0-9a-fA-F]
          {0,2})[- : ]?([0-9a-fA-F]{0,2})[-: ]?([0-9a-fA-F]{0,2})$/"

          usw. verwirren mich eher, als mir darauf hin eine Logig einfallen würde.

          Die Webseite PHP.net hab ich auch schon besucht, doch leider ist nur der erste Teil in Deutsch (mein Englisch... ) und Verstanden hab ich ..noch.. nicht gerade viel.

          Selbst auf SelfPHP.de wird das preg_match nicht aufgeführt.

          Woher soll ich wissen was ich hier machen kann und vor allem wie...

          www.CustomMaps.de, www.Kultevents.net
          www.CustomMap.de, www.Kultevent.net

          Kommentar


          • #6
            Probiere sonst mal, die Zahl mit 1000 zu multiplizieren. Wenn das Ergebnis geteilt durch 10 einen Rest aufweist, wurde eine dritte Zahl hinter dem Komma eingegeben.

            Pseudocode:
            PHP-Code:
            if (($zahl*1000)%10 == 0) {
            //richtige Eingabe
            }
            else {
            //falsche Eingabe

            ungetestet, aber so in etwa sollte es auch klappen...

            Kommentar


            • #7
              Runden geht freilich:

              Man Multipliziert die Zahl mit 100, rundet sie dann und teilt sie anschließend wieder durch 100. So hat man maximal 2 Stellen hinter dem Komma und der Wert ist gültig.

              Erkundige dich auch mal nach number_format(). Das kann man noch benutzen, um aus 2,1 dann wieder 2,10 zu machen.

              Kommentar


              • #8
                Hallo

                Es geht doch nicht ums Runden, sondern der User soll nur zwei Zahlen nach dem Komma eingeben dürfen.

                Denn ich kaufe ja nicht für 22,452 ein sondern für 22,45 EURO.

                Sollte der User sich z.B. vertippen und im Textfeld statt 22,45 , 22,452 eingeben, dann soll eben eine Fehlermeldung erscheinen.

                Damit wird autom. der User auf sein Fehler hingewiesen und ein Betrag wie z.B. 22,456 wird nicht aufgerundet, was am ende noch eine falsche Rechnung erstellen könnte.

                Deshalb geht auch nicht Runden, bzw. ist es absolut nicht gewollt.
                www.CustomMaps.de, www.Kultevents.net
                www.CustomMap.de, www.Kultevent.net

                Kommentar


                • #9
                  Gut, das ist wenigstens ne Erklärung, warum...

                  PHP-Code:
                  if (preg_match("/^[\\d]*,[\\d][\\d]$/U"$zahl)) {
                    
                  // Gültige Eingabe
                  } else {
                    
                  // Ungültige Eingabe

                  Zuletzt geändert von EEBKiller; 18.10.2005, 20:28.

                  Kommentar


                  • #10
                    \d brauch nicht in [ ] stehen ...
                    Die Zeit hat ihre Kinder längst gefressen

                    Kommentar


                    • #11
                      Hmmm... REGEX für Zahlen finde ich nicht so sinnvoll... Gibt doch auch einfache mathematische Lösungen.

                      @derHund: Würde mich mal interessieren, welche Variante bei deinem Benchmark schneller ist.... ;-)

                      Kommentar


                      • #12
                        preg_match ist aber mächtiger, da man damit jede Usereingabe ausschließen kann.

                        Wenn einer zB 1.234,56€ schreibt (tausender-trennpunkt) müsste man wieder einen eigenen Fall Coden. Und für 4 Stellen nach dem Komma und für fünf und für sechs ... (Es gibt genug Leute, die sowas auch zusammenbringen ...)

                        Kommentar


                        • #13
                          Mal in Eigener Sache...

                          Eigentlich verstehe ich die PHP Entwickler nicht ganz so richtig...

                          Im Endeffekt ist es doch so, das das Programmieren nichts anderes ist als Mathematik.
                          Ein Eingabefeld nach der Eingabe zu überprüfen versteht sich von selbst und logischerweise
                          wird es gerade unzählige, nein eher jeden Programmierer geben, wie meinerseits, die ein Eingabefeld zu Berechnung nutzen mit werten wie eine Währung.

                          Warum kommen die PHP Entwickler nicht auf die Simple Idee eine Funktion zu entwickeln, bzw. Bauen, die die Eingabe im Eingabefeld nach einer Währung & Sicherheit überprüft.

                          Das soll heißen, die Funktion überprüft….

                          1.) Funktion wie strtr() Komma in Punkt getauscht (0=OFF, 1=ON)

                          2.) Funktion wie number_format() Tausender Trennzeichen Punkt, z.B. 2.345,88 (Tausender Trennzeichen darf vom Kunde nicht angegeben werden, das Trennzeichen, also den Punkt, setzt die Funktion, die wiederum beim Berechnen Ignoriert wird, Komma oder Punkt wird in der Eingabe als Trennzeichen zum Cent 0,00 genutzt)

                          3.) Wieviel Zahlen sind hinterm Komma erlaubt [wie die Funktion sprintf("%01.2f", string) bloß ohne Runden] (kein Runden, direkte Fehlermeldung wenn Eingabe mehr Zahlen nach Komma enthält (0=OFF, 1=ON){integerzahl_wieviel_nach_komma}

                          4.) Runden ein oder ausschalten (0=OFF, 1=ON, Zeichen auf das gerundet werden soll, also z.B. von 12,5578 auf 12,56 … sofern mehr als zwei stellen erlaubt sind{wird dann z.B. bei Tankstellen genutzt})

                          5.) Mögliches ein und ausschalten von htmlspezialchars() (0=OFF, 1=ON)

                          6.) Funktion is_numeric ein und ausschaltbar (0=OFF, 1=ON) bzw. gleiche oder ähnliche Funktion

                          7.) Funktion, Größer als „Wert“ und Kleiner als „Wert“ einstellbar

                          8.) Zwei Stings als Ausgabe möglich, 1. = mit Tausender Trennzeichen, 2. = ohne Tausender Trennzeichen

                          9.) Da es um eine Währung geht oder es sein kann (muss ja nicht, denn kann ja auch anderweitig verwendet werden) sollte sogar eine Umrechnung stattfinden können
                          die alleine schon eine Funktion wert wäre…
                          Funktionsname(integerzahl_0_für_mit_MwSt_oder_Integerzahl_1_für_betrag_ohne_MwSt, string_geldbetrag, integerzahl_angabe_mwst ohne % sondern reine zahl, ausgabestring_reine_mwst, ausgabestring_geldbetrag_ohne_mwst)


                          Die Funktion sieht dann z.B. so aus…

                          $Variable_wo_Wert_True_oder_False_aufgefangen_wird=Funktionsname(string_empfangenes_eingabefeld, 0 oder 1 wie Beispiel 1.), 0 oder 1 wie Beispiel 2.), 0 oder 1 wie Beispiel 3.){integerzahl_je_nach_anzahl_hinter_komma geschweifte klammer weg wenn OFF}, 0 oder 1 wie Beispiel 4.){integerzahl_je_nach_anzahl_hinter_komma geschweifte klammer weg wenn OFF}, 0 oder 1 wie Beispiel 5.), 0 oder 1 wie Beispiel 6.), wert_größer_als,wert_kleiner_als, 0 oder 1 wie Beispiel 9.){ integerzahl_0_für_mit_MwSt_oder_Integerzahl_1_für_betrag_ohne_MwSt, string_geldbetrag, integerzahl_angabe_mwst ohne % sondern reine zahl}, ausgabestring_geldbetrag_reine_mwst, ausgabestring_geldbetrag_ohne_mwst, ausgabestring_geldbetrag_mit_mwst)

                          Puu…

                          Das war’s.

                          Eigentlich braucht man ja das auch (fast) alles zum Prüfen eines Eingabefeldes in Sachen Währungsbetrag

                          Was haltet Ihr davon????
                          Zuletzt geändert von RycoDePsyco; 19.10.2005, 13:31.
                          www.CustomMaps.de, www.Kultevents.net
                          www.CustomMap.de, www.Kultevent.net

                          Kommentar


                          • #14
                            OffTopic:
                            Viel Spaß
                            Ich denke, also bin ich. - Einige sind trotzdem...

                            Kommentar


                            • #15
                              OffTopic:
                              Natürlich - man kann viel machen. Bspw. könnte man sich auch Frikadellen ans Knie nageln
                              MfG
                              aim
                              Lies mich jetzt!
                              - OT-Tags-Liebhaber und BB-Code-Einrücker -

                              Kommentar

                              Lädt...
                              X