echo (int) ((0.7 + 0.1) * 10);
Bir sınava girdim yanlış çıktı sizce bunun çıktısı neden 7
Cevaplar:
A : 10
B: 8
C: 7
D: 80
0.1 veya
0.7 gibi 10 tabanında kayan noktalı sayılar olarak tamamiyle gösterilebilen gerçel sayılardır, 2 tabanında kayan noktalı sayılar olarak tamamiyle gösterilemezler. Bu bakımdan, az da olsa bir kayıp olmaksızın dahili ikil karşılıklarına dönüştürülemezler. Bunun şöyle bir sonucu olur: örneğin,floor((0.1+0.7)*10) işlevinden beklendiği gibi
8 değil,
7 döner; bunun sebebi dahili gösterimin aslında
7.9999999999999991118... gibi bir değer olmasıdır. Daha fazlası için:
buraya bakabilirsin.