Ankündigung

Einklappen
Keine Ankündigung bisher.

Nummer Format - Komma vs. Punkt

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

  • Nummer Format - Komma vs. Punkt

    Hallo Zusammen,

    der Benutzer kann auf der Webseite die Sprache auswählen [DE] vs. [EN]

    Bei [DE] gibt er die Dezimalzahlen mit Komma ein, z.B. 1,95
    Bei [EN] gibt er die Dezimalzahlen mit Punkt ein, z.B. 1.95

    Wenn [DE] eingestellt ist, soll also mit 1,95 weitergerechnet werden.
    ERROR "A non well formed numeric value encountered"

    Da ich einige Zahlen habe, wollte ich nicht unbedingt str_replace ausführen und Komma mit Punkt ersetzen.

    Gibt es eine elegante Art dem "php" allgeimein zu sagen,
    Bei [DE] "Ab jetzt rechne Dezimalzahlen mit Komma." bzw.
    Bei [EN] "Ab jetzt rechne Dezimalzahlen mit Punkt."

    Vielen Dank,
    Kalem



  • #2
    PHP kennt nur den Punkt als Dezimaltrennzeichen.
    Das bedeutet, dass du Werte aus einem Formular erst einmal validieren und unter Umständen konvertieren musst, um weiter arbeiten zu können.

    Bei der Ausgabe eines Ergebnisses kannst du auf Methoden wie number_format() zurückgreifen, wo du angeben kannst, welches Dezimaltrennzeichen verwendet werden soll.

    Du solltest auch bedenken, was passiert, wenn jemand bei deutscher Einstellung einen Punkt verwendet oder bei Englischer Einstellung ein Komma.
    Zudem sind im Englischen das Komma und im Deutschen der Punkt Trennzeichen für tausendertupel.

    Kommentar


    • #3
      Du kannst die Eingabemoeglichkeiten in deinem Formular einschränken. Dazu kann man zum Beispiel "pattern" Attribut der Inputs verwenden.
      Somit kann der Nutzer kein "falsches" Dezimaltrennzeichen eingeben.

      Natürlich erspart das nicht die Validierung der Werte. Wenn die Methode is_numeric() für deinen Eingabewert true liefert kannst du den Wert direkt mit floatval umwandeln.
      Falls nicht, dann musst du die Zahl weiter umwandeln. So dann zum Beispiel das Dezimaltrennzeichen ersetzen.

      Reguläre Ausdrücke für Float Zahlen
      @see https://www.php.de/forum/webentwicklung/php-einsteiger/php-tipps-2007/44729-regulärer-ausdruck-für-preis-float

      Attribut "pattern" für Input
      @see https://www.w3schools.com/tags/att_input_pattern.asp

      PHP Methoden
      @see http://php.net/manual/de/function.is-numeric.php
      @see http://php.net/manual/de/function.floatval.php

      Kommentar


      • #4
        Hallo Kalem,
        ich sehe den PHP Bezug nicht.

        möglicherweise hilft das:
        http://w3c.github.io/html-reference/input.number.html

        bedenke bitte auch, dass unabhängig davon Strings übertragen werden.

        Kommentar


        • #5
          Vielen Dank.

          Mein Lösungsansatz:
          - Ich greife den eingegebenen Wert und prüfe mit Javascript auf Korrektheit (werde später mit pattern für Input versuchen, wenn ich das je über RegeEx hinbekommen sollte )
          - Bevor in php gerechnet wird, wandele ich über str_replace den Wert mit der entsprechenden Delimiter um

          Kommentar


          • #6
            mit strings zu rechnen macht wohl wenig Sinn.

            Kommentar


            • #7
              tomBuilder Da bin ich deiner Meinung. Aber manchmal geht es doch, siehe http://php.net/manual/en/function.bcadd.php

              Gnom42 und andere
              Pattern und diese Konvertierungsmassnahmen sind alle nicht nötig.
              Lediglich die richtige Sprache im Fom Element mitteilen und schon sind alle Eingaben der Sprache entsprechend akzeptiert und werden dann auch korrekt umgewandelt. Gilt für Date und Number.

              Beispiel für französisch in Frankreich wir geben ein 45,45
              PHP-Code:
              <form id="form" lang="fr-FR">
                  <
              label for="gewicht">Ihr Gewicht ist: </label>
                  <
              input id="gewicht" name="gewicht" type="number" placeholder="6 bis 99" min="6" max="99" step="0.01" value="">
                  <
              div>
                      <
              input type="submit">
                  </
              div>
              </
              form
              PHP-Code:
              var_dump($_GET); 
              egibt
              Code:
              array (size=1)
                'gewicht' => string '45.45' (length=5)

              Kommentar


              • #8
                Den Benutzer die Kommaschreibweise bei der Eingabe aufzuzwingen, halte ich für einen fatalen Fehler. Denn so muss ein Benutzer jedesmal die Sprache der Seite beachten. Mich als Eingebenden würde das total nerven, da ich persönlich seit der Schulzeit vor 25 Jahren immer nur die Punktschreibweise von Taschenrechnern kenne. Mann könnte meinen, die meisten Menschen verstehen die Computernormen besser als manch bevormundender Informatiker, der sich so eine sinnlose Krücke ausdenkt, die zu haufenweise Problemen führt.
                bitcoin.de <- Meine Freelancerwährung

                Kommentar


                • #9
                  Zitat von Alpha Beitrag anzeigen
                  Den Benutzer die Kommaschreibweise bei der Eingabe aufzuzwingen, halte ich für einen fatalen Fehler. Denn so muss ein Benutzer jedesmal die Sprache der Seite beachten. Mich als Eingebenden würde das total nerven, da ich persönlich seit der Schulzeit vor 25 Jahren immer nur die Punktschreibweise von Taschenrechnern kenne.
                  Irgendwo muss die Schreibweie aber festgelegt sein. Wie willst du sonst Zahlenwerte unterscheiden?

                  1.337 kann je nach Sprachregion entweder 1,337 oder 1337 bedeuten. Willst du jetzt Hellsehen, ob der User mit dem Punkt ein Dezimalzeichen oder ein Tausendertrennzeichen gemeint hat?

                  Und dem Benutzer die englische Punktschreibweise aufzuzwingen kann ja auch nicht die Lösung sein, nur weil du es seit 25 Jahren so machst.

                  Davon abgesehen sollte eine korrekt programmierte Webseite auf deine Systemeinstellung reagieren und die passende Formatierung für dich ausliefern. Dazu musst du natürlich auch dein System auf die gewünschte Formatierung stellen.

                  Kommentar


                  • #10
                    Ein Hinweis reicht vollkommen. Da wird Punkttrennung festgelegt und alles andere abgelehnt. Maximal noch eine Plausibilitätsprüfung. Aber alles andere würde ich nicht zulassen.
                    Das gefühlte Bedürfnis Kommas und Tausendertrennung einzugeben ist aus meiner Sich ein nicht reales Problem. Bis heute sind offenbar milliarden Menschen im Internet trotz engl. Standards. Und vor ein paar Jahren sah es beim Komfort noch viel schlimmer aus als heute.
                    bitcoin.de <- Meine Freelancerwährung

                    Kommentar


                    • #11
                      Zitat von Alpha Beitrag anzeigen
                      Ein Hinweis reicht vollkommen. Da wird Punkttrennung festgelegt und alles andere abgelehnt. Maximal noch eine Plausibilitätsprüfung. Aber alles andere würde ich nicht zulassen.
                      Das gefühlte Bedürfnis Kommas und Tausendertrennung einzugeben ist aus meiner Sich ein nicht reales Problem. Bis heute sind offenbar milliarden Menschen im Internet trotz engl. Standards. Und vor ein paar Jahren sah es beim Komfort noch viel schlimmer aus als heute.
                      Heute sind aber andere Menschen im Internet als damals. Davon abgesehen gibt es ja schon fertige Lösungen, die auf all das Rücksicht nehmen. Warum diese nicht einfach verwenden? Der Mehraufwand ist praktisch nicht vorhanden. Und die Argumentation es ist so weil es immer scho so war ist IMHO keine Argumentation.

                      Kommentar


                      • #12
                        Warum verweist Du nicht auf eine allgemein als Standard anerkannte Fertiglösung und lässt erst alle danach suchen? Wenn Du schon so weit voraus bist, ist es ja nicht sehr gut alle an der langen Leine zu lassen. Manchmal kommt es mir so vor, als ob Leute Spaß daran haben andere vorzuführen.
                        bitcoin.de <- Meine Freelancerwährung

                        Kommentar


                        • #13
                          Zitat von Alpha Beitrag anzeigen
                          Warum verweist Du nicht auf eine allgemein als Standard anerkannte Fertiglösung und lässt erst alle danach suchen?
                          Wurde hier schon erwähnt. z.B. type="number"

                          Kommentar

                          Lädt...
                          X