Ankündigung

Einklappen
Keine Ankündigung bisher.

Preis speichern (Komma in Punkt wandlen)

Einklappen

Neue Werbung 2019

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

  • #16
    Zitat von Sirke Beitrag anzeigen
    Darf ich einmal einen ganz anderen Punkt einwerfen? Meines Wissens nach speichert man Geldbeträge immer als Ganzzahlen, weil bei Gleitkommazahlen die Gefahr von internen Rundingsfehlern zu groß ist!
    Nun, was er wirklich benutzt hat, wissen wir ja gar nicht -
    Zitat von noop Beitrag anzeigen
    ich hab ein Preiseingabefeld was in der Datenbank mit douple(10,2) angelegt ist.
    - ich zumindest kenne kein „douple“. Vielleicht meint er Duplo


    Aber du hast Recht, einen Gleichtkomma-Zahlentyp sollte man für sowas definitiv nicht nutzen.
    Entweder speichert man Ganzzahlen (dann halt nicht in Euro, sondern Cent), oder man nutzt einen Datentyp wie MySQLs Decimal.
    [SIZE="1"]RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?[/SIZE]

    Kommentar


    • #17
      Und was ist, wenn der Preis mal über 1000 liegt und dann noch jemand 1000-er Trennzeichen eingibt?

      PHP-Code:
      $price str_replace(".","",$price);
      $price str_replace(",",".",$price); 
      [B]Es ist schon alles gesagt. Nur noch nicht von allen.[/B]

      Kommentar


      • #18
        Und was ist, wenn der Preis mal über 1000 liegt und dann noch jemand 1000-er Trennzeichen eingibt?
        Dafür gibt es keine echte Lösung. Ansatz siehe im Wiki, es gibt aber Sonderfälle, die nicht entschieden werden können.
        [COLOR="#F5F5FF"]--[/COLOR]
        [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
        „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
        [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
        [COLOR="#F5F5FF"]
        --[/COLOR]

        Kommentar


        • #19
          Meine Lösung
          PHP-Code:
          $price = array('10,000,00''10.000,00''10,000.00''10.000.00''1,000,00''1.000,00''1,000.00''1.000.00''100.00''100,00''10.00''10,00''1.00''1,00''1''0.1''0,1''0.01''0,01');
          foreach (
          $price as $key => $value) {
              
          $replace = array(',''.');
              
          $price1 substr($value0, -3);
              
          $price1 str_replace($replace""$price1); 
              
          $price2 substr($value, -3);
              
          $price2 str_replace(",""."$price2); 
              
          $price $price1.$price2;
              print 
          $price;
              print 
          '<br />';

          Ausgabe:
          Code:
          10000.00
          10000.00
          10000.00
          10000.00
          1000.00
          1000.00
          1000.00
          1000.00
          100.00
          100.00
          10.00
          10.00
          1.00
          1.00
          1
          0.1
          0.1
          0.01
          0.01

          Kommentar


          • #20
            Traimaster: Nicht übel die Lösung. Die zielt wahrscheinlich auf eine mögliche englische Notation ab. Man könnte - nicht nur aus Gründen der Float-Vereinheitlichung - auch noch die Leerzeichen rausnehmen.

            PHP-Code:
            $replace = array(',''.',' '); 
            Dann hat man das französische Tausendertrennzeichen auch schon mit erschlagen.
            [B]Es ist schon alles gesagt. Nur noch nicht von allen.[/B]

            Kommentar


            • #21
              Was ist daran gut?
              - 10,000,00 ist Unsinn. Niemand wird so eine Zahl angeben. Denn sonst könnte es gleichzeitig 10,00000 oder 10000,00 bedeuten
              - die Lösung geht immer von einem zweistelligen Nachkommabereich aus?
              [COLOR="#F5F5FF"]--[/COLOR]
              [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
              „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
              [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
              [COLOR="#F5F5FF"]
              --[/COLOR]

              Kommentar


              • #22
                Zitat von Trainmaster Beitrag anzeigen
                @ Sirke

                Wie willst du einen Betrag von bspw. 99,99 € als Ganzzahl speichern
                Na, was ist denn die kleinste Einheit beim Geld, hmm?

                Ganzzahl ist auch nicht korrekt, es nennt sich Festkommawert (engl. "fixed point"), bedeutet aber im Grunde genau das, was Sirke bereits sagte...

                Anschauungsbeispiel:
                Festkomma :: fixed point :: ITWissen.info
                Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                Kommentar


                • #23
                  Bzgl. Ganzzahlen: Das löst doch nicht das Problem, dass man erst mal die gemeinte Zahl erkennt. Oder wie konvertiert man 1,123.12 - 1.123,12 - 1 123,12 einheitlich in Ganzzahlen. Das müßte doch die gleiche Übung wie oben sein.
                  [B]Es ist schon alles gesagt. Nur noch nicht von allen.[/B]

                  Kommentar


                  • #24
                    Naja, da muss man m.M.n. seinen eigenen Regeln mal folgen. ENTWEDER der Punkt ist das Tausendertrennzeichen ODER das Komma, die Bedeutung einfach mal mittendrin zu wechseln ist Käse...

                    1,123.12 -> 1.12

                    Wer auch immer seine Zahl so eingibt, muss sich nicht über das Ergebnis wundern. Es macht auch keinen Sinn zu raten, "was könnte der User denn nun wirklich gemeint haben?"... es ist müßig, darüber nachdenken zu müssen, das dreht sich irgendwann einfach nur noch im Kreis.

                    nikosch:
                    - 10,000,00 ist Unsinn. Niemand wird so eine Zahl angeben. Denn sonst könnte es gleichzeitig 10,00000 oder 10000,00 bedeuten
                    Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                    Kommentar


                    • #25
                      Die beste Lösung dürfte sein, solche Zahlen rigoros abzulehen, die mehr als ein nicht-numerisches Zeichen beinhalten.
                      PHP-Code:
                      "\d+(?:[,\.]\d{2})?" 
                      Garantiert bspw. eine definitiv ganzzahlige Angabe oder eine mit 2 Nachkommastellen. Das lässt sich leicht nach Cent umwandeln.
                      Unterstützend kann man das Preiseingabefeld mit Javascript etwas pimpen.
                      [COLOR="#F5F5FF"]--[/COLOR]
                      [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
                      „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                      [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
                      [COLOR="#F5F5FF"]
                      --[/COLOR]

                      Kommentar


                      • #26
                        @ lstegelitz
                        Na wenn ich Ganzzahl sage, sollte ich auch Ganzzahl meinen. Natürlich kann man 99 € und 99 Cent speichern, aber das ist doch viel zu umständlich.

                        @Topic
                        Völlig gleich ob £1,099.99 oder 1.099,99€, meine Lösung liefert das gewünschte Ergebnis in Form von 1099.99. Und das ist schließlich das, was hier bezweckt werden soll. Und natürlich gehe ich von einem 2-stelligen Nachkommabereich aus, weil ich im Supermarkt ungern 1,999€ für das Gemüse bezahle. Das 10,000,00 ein unsinniges Beispiel ist, stimmt. Im Eifer des Gefechts habe ich verschiedene Kombinationen aufgeführt und nicht auf Sinnhaftigkeit geachtet.

                        Was ist daran gut?
                        - 10,000,00 ist Unsinn. Niemand wird so eine Zahl angeben. Denn sonst könnte es gleichzeitig 10,00000 oder 10000,00 bedeuten
                        @ nikosch
                        Wenn jemand einen Geldbetrag in der Form von 10,000,00 eingibt, wieso sollte das 10,00000 bedeuten?

                        Nachtrag: Es wäre angebracht, wenn der Ersteller dieses Themas ein paar mehr Informationen über sein Vorhaben preisgibt. D.h. welche Währungen akzeptiert werden sollen, zu welchem Zweck usw. Dann kann man auch eine dementsprechende Lösung erarbeiten. Sonst ufert das Thema hier noch aus ...

                        Kommentar


                        • #27
                          - 10,000,00 ist Unsinn. Niemand wird so eine Zahl angeben. Denn sonst könnte es gleichzeitig 10,00000 oder 10000,00 bedeuten
                          Zitat von Trainmaster Beitrag anzeigen
                          @ nikosch
                          Wenn jemand einen Geldbetrag in der Form von 10,000,00 eingibt, wieso sollte das 10,00000 bedeuten?
                          Im ersten Fall wurde das erste Komma als Komma und das Zweite als Trennzeichen für Tausendstel interpretiert. Im zweiten Fall wurde das erste Komma als 1000er Trennzeichen und das Zweite als Komma interpretiert.
                          [URL]http://hallophp.de[/URL]

                          Kommentar


                          • #28
                            @ Asipak

                            Bei einer Preiseingabe nach Tausendtsel zu interpretieren macht für mich absolut KEINEN Sinn.

                            Dass bei Kalkulationen mit Währungen ein Wert mit mehr als zwei Nachkommastellen herauskommen kann ist mir durchaus bewusst.

                            Kommentar


                            • #29
                              Ich habe nur versucht, deine Frage zu beantworten.
                              [URL]http://hallophp.de[/URL]

                              Kommentar


                              • #30
                                Bei einer Preiseingabe nach Tausendtsel zu interpretieren macht für mich absolut KEINEN Sinn.
                                Es gibt aber keine Garantie dafür, dass ein Nutzer eine genau 2-stellige Nachkommaeingabe macht.
                                Nach Deinem Kriterium
                                Völlig gleich ob £1,099.99 oder 1.099,99€, meine Lösung liefert das gewünschte Ergebnis in Form von 1099.99.
                                kann ich auch einfach das machen:
                                PHP-Code:
                                $out str_replace (array(',','.',' ') , '' $in);
                                $out $out 100.0
                                [COLOR="#F5F5FF"]--[/COLOR]
                                [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
                                „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                                [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
                                [COLOR="#F5F5FF"]
                                --[/COLOR]

                                Kommentar

                                Lädt...
                                X