Zahlen richtig formatieren

  • Hey zusammen,


    ich stehe vor einer Herausforderung mit Zahlen bei der ich gerade einfach nicht weiterkomme.


    Situation:

    Ich habe 2 Zahlen. Sagen wir mal die Zahl 5,45 - 2 mal. Nun wenn ich diese mal 2 nehme komme ich auf 9,9. Alles auch korrekt.

    Ich möchte nun jedoch, dass bei solchen Ergebnissen, oder auch bei Ergebnissen bei denen keine Nachkommazahl kommt mindestens 2 stehen haben.


    Bedeutet:
    9,9 wird zu 9,90

    9 wird zu 9,00


    Ich habe nun echt viel mit ausprobiert. Mit den Funktionen round(), number_format() mit 2 Nachkommastellen als Parameter.


    Doch bei round wird z.B. 9,9 auf 9 bei folgendem Code abgerundet:
    round($zahl, 2); Warum kann ich mir nicht erklären.


    Bei number_format() werden mir trotz Angabe von 2 Nachkommazahlen in diesem Fall nur 1 oder keine angezeigt.


    Außerdem habe ich schon mit floor, sprintf (Floatzahl) und Divisionen es ausprobiert. Da kam auch immer das gleiche raus.


    Habt ihr Ideen wie ich es hinbekomen kann?


    Schöne Grüße,

    Stef

  • Das hier

    macht bei mir diese Ausgabe

    9.90
    9.00
    9.00
    999.99



    EDIT:

     bcdiv()  scheint auch zu funktionieren

    Code
    1. $numbers=['9','99','99.9999','9999.9999',9,99,99.9999,9999.9999];
    2. foreach($numbers as $val){
    3. echo bcdiv($val, 1, 2).'<br>';
    4. }

    Ausgabe

    9.00
    99.00
    99.99
    9999.99
    9.00
    99.00
    99.99
    9999.99

  • Hey,


    vielen Dank für euere Tipps und Hilfe.


    Ich habe folgende Zahlen:

    PHP
    1. $price = "3.34";
    2. $productCount = (int) filter_var(trim($_POST["produktanzahl"]), FILTER_VALIDATE_INT);
    3. $pay = ($price * $productCount);
    4. // Wenn ich nun auf die Rechnung ein round anwende wird keine Rundung vorgenommen sondern die Kürzung.
    5. // $pay = round(($price * $productCount), 2); -> Ergebnis bei 9.9 = 9


    Ich habe bei number_format() der Funktion eine vordefenierte float mitgegeben, was nicht funktioniert hat. Nun wenn man die Zahl dirket in der Funktion als float setzt funktioniert es.


    Mir kommt als einzigste Idee, dass die vorige Zahl dann kein Float ist aber es ist ein Float.


    Warum ist das denn so?


    Schöne Grüße,
    Stef

  • http://sandbox.onlinephpfuncti…f76ba3a4a29e691f37f9a112a


    Probiert es mit anderen PHP-Versionen aus, es kommen immer dieselben Ergebnisse.

    Dieses Verhalten von round wird auch so in der Doku beschrieben: https://www.php.net/manual/de/function.round.php


    Bei wem das also out of the box funktioniert, verfügt scheinbar nicht über Standardeinstellungen.

    Die Empfehlung zur bc-Bibliothek oder number_format erscheint mir daher sinnvoller, wobei bcdiv die besten Ergebnisse liefert.