Warum druckt dieser Code ein Ergebnis von '7'?

7

Ich habe vor kurzem begonnen, PHP zu lernen.

%Vor%

Bitte überzeugen Sie mich von diesem Umwandlungstyp.

    
L.Lawliet 30.06.2010, 15:24
quelle

6 Antworten

11

Von PHP.net

  

Es ist typisch, dass einfache Dezimalbrüche wie 0.1 oder 0.7 ohne einen geringen Genauigkeitsverlust nicht in ihre internen binären Gegenstücke umgewandelt werden können. Dies kann zu verwirrenden Ergebnissen führen: beispielsweise gibt floor ((0.1 + 0.7) * 10) normalerweise 7 anstatt der erwarteten 8 zurück, da die interne Darstellung etwa 7.9 ist.

     

Dies ist aufgrund der Tatsache, dass es nicht möglich ist, einige Brüche in Dezimalschreibweise mit einer endlichen Anzahl von Ziffern auszudrücken. Zum Beispiel wird 1/3 in Dezimalform zu 0,3.

    
James Goodwin 30.06.2010, 15:29
quelle
6

Sie geraten in Fließkomma-Ungenauigkeit.

0.1 + 0.7 ist nicht genau 0.8, aber etwas weniger. Die Umwandlung nach int schneidet den Wert einfach ab und ergibt 7 als Ergebnis.

Um das richtige Ergebnis zu erhalten, verwenden Sie die Rundung:

%Vor%     
Dirk Vollmar 30.06.2010 15:31
quelle
1

Aus Ссылка

  

Es ist typisch diese einfache Dezimalzahl   Fraktionen wie 0,1 oder 0,7 können nicht sein   konvertiert in ihre interne binäre   Gegenstücke ohne einen kleinen Verlust von   Präzision. Dies kann zu Verwirrung führen   Ergebnisse: zum Beispiel   Stock ((0,1 + 0,7) * 10) wird in der Regel   Rückgabe 7 statt der erwarteten 8,   seit der internen Darstellung wird   sei etwas wie 7.9.

    
Anthony Potts 30.06.2010 15:29
quelle
1

Wie andere gesagt haben, liegt das an einem Genauigkeitsverlust, wie er sich in:

zeigt %Vor%

welche Ausgaben:

  

0.79999999999999933386618522
     0
     7.999999999999999111821580300
     7

    
GreenMatt 30.06.2010 15:47
quelle
0

Sie sehen wahrscheinlich einen Fließkomma-Rundungsfehler, und wenn Sie int() it, geht es von 7 ... 9 zu 7.

    
Daenyth 30.06.2010 15:28
quelle
0

Ich bin mir nicht sicher, aber das liegt wahrscheinlich daran, dass der Int Cast abgeschnitten wird.

.1 + .7 könnte zu .799999999999999999999999 und

führen

multipliziert dies mit 10 = 7.9999999999999999999

(int) schneidet dies auf 7 ab.

    
tathagata 30.06.2010 15:30
quelle

Tags und Links