Chrisi: Preisangaben als Float oder Integer speichern?

Hallo zusammen,

für eine Abrechnunsgsoftware die auf php & MySQL basiert soll die Grundsatzfrage geklärt werden in welchem Format die Preise abgespeichert werden, hierzu würde ich mir gern eure Meinung einholen. Besonderes Merkmal: Die Software soll international für versch. Währungen tauglich sein.

Ich habe mir einige PHP & MySQL Lösungen angeschaut die mit Preisangaben arbeiten. Viele arbeiten mit Float, haben dadurch aber mit Rundungsfehlern zu kämpfen, andere wiederum speichern die Preise in der DB als Cent also "Preis * 100".

Ich könnte mir vorstellen das die Variante mit den Cents (Preis * 100) weniger Probleme bei der Preisprezision macht.

Kann mir hier jemand erklären wo die Vor- und Nachteile dieser beiden Verfahren sind?

Danke für eure Mühen.

Viele Grüße
Chrisi

  1. @@Chrisi:

    nuqneH

    Ich habe mir einige PHP & MySQL Lösungen angeschaut die mit Preisangaben arbeiten. Viele arbeiten mit Float, haben dadurch aber mit Rundungsfehlern zu kämpfen, andere wiederum speichern die Preise in der DB als Cent also "Preis * 100".

    Weder das eine noch das andere ist besonders sinnvoll, sondern DECIMAL.

    Qapla'

    --
    Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
    (Mark Twain)
    1. Weder das eine noch das andere ist besonders sinnvoll, sondern DECIMAL.

      Und je nach Anwendungsfall (z.B. ob die Preise als Basis für Währungsumrechungen dienen bzw. ob sie mit oder ohne Steuer hinterlegt sind) mit einer entsprechenden Genauigkeit bez. der Nachkommastellen.

      Zwei sind in den meisten Fällen zu wenig - für Netto-Preise ohne dem Bedürfnis, sie in andere Währungen umrechnen zu müssen, sind idR. drei Stellen ausreichend.

      1. Zwei sind in den meisten Fällen zu wenig - für Netto-Preise ohne dem Bedürfnis, sie in andere Währungen umrechnen zu müssen, sind idR. drei Stellen ausreichend.

        Schon ein Liter Benzin wird mit drei Nachkommastellen abgerechnet. Kleinteile wie z.B. Schrauben brauchen noch mehr Stellen oder die Möglichkeit, eine Preiseinheit anzugeben (z.B. 1000 Stück).

        Kalle

  2. Hi,

    Ich könnte mir vorstellen das die Variante mit den Cents (Preis * 100) weniger Probleme bei der Preisprezision macht.

    außer bei Währungen, deren Untereinheit keinen Hundertsteln entspricht.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. @@Cheatah:

      nuqneH

      außer bei Währungen, deren Untereinheit keinen Hundertsteln entspricht.

      Das waren noch Zeiten mit Pfund, Schillingen und Pence.

      Obwohl mir zu Ohren gekommen ist, dass manche Völkchen tatsache noch so rechnen – nicht bei Geld, aber bei Längen. Unglaublich!

      Qapla'

      --
      Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
      (Mark Twain)
      1. Obwohl mir zu Ohren gekommen ist, dass manche Völkchen tatsache noch so rechnen – nicht bei Geld, aber bei Längen. Unglaublich!

        Du meinst, Imperiale Einheiten? SCNR

    2. Hi,

      vorweg, danke für eure Antworten.

      außer bei Währungen, deren Untereinheit keinen Hundertsteln entspricht.

      Also wenn ich dich richtig verstanden habe trifft das nur auf Mauretanien und Madagaskar zu?

      Viele Grüße
      Chrisi

      1. Tach,

        außer bei Währungen, deren Untereinheit keinen Hundertsteln entspricht.

        Also wenn ich dich richtig verstanden habe trifft das nur auf Mauretanien und Madagaskar zu?

        nein, außerdem im Moment Vietnam, Volksrepublik China, Kambodscha, Nepal und Saudi-Arabien. Laut englischer Wikipedia auch noch Macao, Taiwan, Tunesien, Bahrain, Jordanien, Kuwait, Lybien, Irak, Tonga und Oman. Aber die sind zumindestens alle schonmal zur Basis 10 und damit einfacher zu verarbeiten.

        mfg
        Woodfighter

        1. Tach,

          Aber die sind zumindestens alle schonmal zur Basis 10 und damit einfacher zu verarbeiten.

          zur Nutzung der nicht-dezimalen Währungen siehe Wikipedia - De facto decimalisation.

          mfg
          Woodfighter

        2. Moin!

          außer bei Währungen, deren Untereinheit keinen Hundertsteln entspricht.

          Also wenn ich dich richtig verstanden habe trifft das nur auf Mauretanien und Madagaskar zu?

          nein, außerdem im Moment Vietnam, Volksrepublik China, Kambodscha, Nepal und Saudi-Arabien. Laut englischer Wikipedia auch noch Macao, Taiwan, Tunesien, Bahrain, Jordanien, Kuwait, Lybien, Irak, Tonga und Oman. Aber die sind zumindestens alle schonmal zur Basis 10 und damit einfacher zu verarbeiten.

          Theoretisch. In Vietnam z.B. ist die kleinste Einheit 1000 Dong. das ist eine Muenze ungefaehr so gross wie 10 Eurocent. Etwas dicker und schwerer. Ich persoenlich kenne keinen Vietnamesen, der Hao oder Xu kennt. (geb aber gern zu, dass die Menge der mir bekannten Vietnamesen recht ueberschaulich ist) Fuer einen Onlineshop wuerden da wahrscheinlich ganze Zahlen ab 1000 reichen. Das wird wohl auch nicht nur dort so sein.

          Schon in der EU gibts genug Laender die im taeglichen Zahlungsverkehr nicht auf die Hundertstel achten.

          --
          Ich bin dafuer verantwortlich was ich sage, nicht dafuer, was Du verstehst.