PHP-Fehler bei Type-Casting?!

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • 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); 
    Last edited by Slava; 29-08-2007, 14:12.
    Slava
    bituniverse.com

    Comment


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

      Comment

      Working...
      X