rundet php falsch?

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

  • #16
    Wie soll denn da ein Komma ersetzt werden, wenn gar keine vorhanden ist?! -.-
    Offensichtlich geht round mit dem Parameter anders um, weil str_replace statt float einen String zurückliefert, das kann man dann aber auch besser mit
    round((string)$zahl);
    erreichen (sofern es funktioniert) ... mal gucken, vielleicht hab ich wenn ich wieder komme nochmal Bock mir das genauer anzuschauen ^^

    Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

    bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
    Wie man Fragen richtig stellt

    Kommentar


    • #17
      Re: rundet php falsch?

      Original geschrieben von deltacon

      Wäre schön ....hab eine komplette Rechnungslegung programmiert und 1000 Mal round verwendet, wenn ich das jetzt alles ändern kann....na danke!
      float war noch nie der richtige kommerzielle Zahlentyp

      Da du 1000x round verwendet hast, hättest du gescheiter eine Funktion dafür gemacht. So codiert man nicht, kannst gerade beides verbessern.

      Kommentar


      • #18
        Da du 1000x round verwendet hast, hättest du gescheiter eine Funktion dafür gemacht.
        round() ist doch eine Funktion!!! Sie ist halt im PHP implementiert, aber im Prinzip ists eine Funktion.
        Und wenn ich jede Funktion reprogrammieren muss, die ich öfters verwende, nur weils evtl. sein könnte, dass sie falsche Ergebnisse liefert, wo liegt da der Sinn?

        Habs nun trotzdem so gelöst, dass ich mittels Find/Replace alle normalen rounds ersetzt habe und nur mehr mit der Funktion arbeite. Normalerweise mach ich ab 2x Verwenden des selben Codes eh eine Funktion.
        Wie gesagt, anfänglich ergab es für mich keinen Sinn, eine Funktion nochmal zu programmieren.
        float war noch nie der richtige kommerzielle Zahlentyp
        und was verwendest du "kommerziell" (wie definierst du kommerziell in diesem Zusammenhang)?

        Übrigens:
        PHP-Code:
        $zahl 17.025 100;
        $zahl round((string) ($zahl));
        $zahl $zahl 100;
        echo 
        $zahl
        -> 17.03
        Hängt also wirklich damit zusammen, dass es ein String ist! Wenigstens funktionierts so nun aber!

        Kommentar


        • #19
          Original geschrieben von deltacon
          round() ist doch eine Funktion!!! Sie ist halt im PHP implementiert, aber im Prinzip ists eine Funktion.
          Und wenn ich jede Funktion reprogrammieren muss, die ich öfters verwende, nur weils evtl. sein könnte, dass sie falsche Ergebnisse liefert, wo liegt da der Sinn?

          Wie gesagt, anfänglich ergab es für mich keinen Sinn, eine Funktion nochmal zu programmieren. und was verwendest du "kommerziell" (wie definierst du kommerziell in diesem Zusammenhang)?

          Also eine etwas längere Antwort. Je nachdem was gemacht wird, spielt das folgende eine Rolle oder nicht so.


          kommerziell ist Währung, oder Gewichte, oder Stückzahlen. Implementiert als z.B. ganze Zahlen, oder strings, oder (in früheren computergeneration packed decimal. mti einem eingebildeten Dezimalpunkt). Ich glaube Währung ist 16 Stellen, mit höchstens 3 Stellen nach dem Komma). Für Prozentrechnung muss man noch etwas genauer rechnen, auch Dollarkurs auf 5 Stellen, oder * 100000.

          Das mit der runden-Funktion ist so vorgedacht, dass die Rundungsregeln nicht 1000x vorkommen sollen. Es gibt Rundung auf cent, auf 5 cent, auf Einheiten usw. Und das Auf- Abrunden ist auch genauer geregelt, z.B. immer auf, immer ab, immer auf gerade Ziffer, das kann man php und/oder excel nur überlassen wenn es egal ist. Man muss zB. auch beim MWST-Rechnen aufpassen, dass man nur einmal rechnet und rundet, weil es eine Steuer vom Total ist (in Rechnungen). Die Abnehmer können auch rechnen und ich habe das schon gesehen, dass es parallel gerechnet wurde (MWST auf Posten hier, MWST auf total dort, vor runden hier, nach runden dort => gibt kleine Differenzen der Buchhalter hat Arbeit).

          Wenn die Währung in ganzen Zahlen oder strings ist mit einem eingebildeten Komma, braucht es robusterweise Rechenfunktionen. Das eingebaut + * - / ist dafür nicht geeignet. Man kann natürlich überlegen, dass eine 32bit Zahl ausreicht, dann ist es wieder egal.

          Wie kommt es zu 1000 Rundungsoperationen im Sourcecode, ist das pro Artikel oder pro Konto je eine?


          Sorry für die vielen Ueberlegungen, wenn Du Dir eine gute Antwort geben kannst, ist alles i.O.

          Kommentar


          • #20
            Hi Phönix und danke für deine ausführliche Antwort! Ich denke, meine wird noch ausführlicher...

            Nagel mich nicht auf "1000x" fest, das war nur eine Übertreibung (ich habs nicht gezählt), aber ich habe Rücksprache mit meinem Steuerberater gehalten bevor ich mit dem Projekt begann.

            Da ich vorher noch nie buchhalterisch programmiert hatte, wollte ich sichergehen, konnte aber nirgends Infos finden, drum hab ich meinen Steuerberater gefragt.
            Umso besser, dass ich jetzt mal Jemanden mit kaufmännischer Erfahrung hab :-).
            Ich runde nach jeder Rechenoperation auf 2 Stellen, soweit mal hier.

            Ich habe eigentlich schon begonnen mit dem restlichen Teil meiner Antwort, das Ganze nun aber in einen eigenen Thread verpflanzt, da es hier glaub ich nicht mehr herpasst:
            http://www.php-resource.de/forum/sho...threadid=71263

            Im Moment hab ich mit dem von dir erwähnten Problem zu kämpfen, dass die Mwst. pro Position gespeichert wird und da gewisse Rundungsdifferenzen entstehen. Für diesen Fall gibts nun einen eigenen Centausgleich Positionssatz.

            Mehr im anderen Thread

            Kommentar

            Lädt...
            X