PHP-Fehler bei Type-Casting?!

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

  • PHP-Fehler bei Type-Casting?!

    Hallo, gerade bin ich auf ein für mich sehr merkwürdiges verhalten von PHP beim Type-Casting von float zu integer gestoßen:

    PHP-Code:
    <?php
    $summe 
    6.77;
    var_dump($summe);
    $summe $summe floor($summe);
    var_dump($summe);
    $summe *= 100;
    var_dump($summe);
    $summe = (int)$summe;
    var_dump($summe);
    $summe = (float)$summe;
    var_dump($summe);
    ?>
    Dieser Code liefert bei mir folgende Ausgabe:

    float(6.77)
    float(0.77)
    float(77)
    int(76)
    float(76)

    Was mich hier wundert, ist, dass es, wenn ich die Zahl 77 von Float in Integer umwandle, 76 ergibt. Kann mir das bitte jemand erklären?

  • #2
    problem liegt daran, dass 0.77 in binerformat kann man nicht darstellen da dieser Zahl unendlich viele bits braucht.
    man versucht einfach diesen wert so viel das möglich in binerem zustand zu haleten um die genauigkeit weiter zu behalten. kommt es aber zu einer ausgabe mit echo, wird der Zahl bei undarstelbaren genauigkeit für die Ausgabe gerundet. Also wird aus 76.9999999999....(dezimal gesehen) ein 77.
    wenn wir jetzt IntCasting machen dann wird nicht aus 77.0 sondern aus dem 76.999... ein int gemacht, was natürlich zum 76 führt.
    PHP-Code:
    $summe 6.77;
    var_dump($summe);
    $summe $summe floor($summe);//hier kommt es zum verlüst
    var_dump($summe);//hier wird abgerundete version gezeigt

    $summe *= 100;//hier wir mit originalzahl weiter gerechnet
    //hier wird abgerundete version gezeigt
    var_dump($summe);

    //lösungseinsatz! 
    //erst stringcasting machen um den bezug zum originalem zahl zu lösen
    $summe = (int)(string)$summe;
    var_dump($summe);
    $summe = (float)$summe;
    var_dump($summe); 
    Zuletzt geändert von Slava; 29.08.2007, 15:12.
    Slava
    bituniverse.com

    Kommentar


    • #3
      http://www.php.net/manual/en/languag...nteger.casting
      http://www.php.net/manual/en/languag...loat-precision

      Kommentar

      Lädt...
      X