Hvala, je bolje je. :]
Dakle, zadatak je sljedeći:
$broj = (int) ((0.7 + 0.1) * 10);
(int)
je type-casting podatka u integer (cijeli broj). Dakle taj type-casting će pretvoriti podatak/vrijednost u integer, a u ovom slučaju vrijednost koju će pretvoriti je ((0.7 + 0.1) * 10)
. Da nemamo jednu otvorenu i zatvorenu zagradu, odnosno da je zadatak sljedeći:
$broj = (int) (0.7 + 0.1) * 10;
Onda bi se type-castanje vrijednosti odnosilo samo na (0.7 + 0.1)
, i onda se sve to pomnožilo s 10, što znači da bi se prvo vrijednost 0.8 type-castala u integer i dobili bismo 0, a zatim 0 puta 10 je… 0, i to bi bio konačni rezultat.
Vratimo se na prvotni zadatak… dakle gledamo sve u zagradi kao jednu vrijednost, i tu vrijednost ćemo type-castati u integer. Ako riješimo izraz ((0.7 + 0.1) * 10)
dobijemo (0.79999999 * 10)
, a to je 7.9999999
Kada type-castamo 7.9999999 u integer s (int)
, dobit ćemo 7, očekivano, isto kao što bi iz vrijednost 6.7342 castanjem dobili 6, ili castanjem stringa “12 patuljaka” dobili integer 12. Ako ne castamo u integer prvotni zadatak, odnosno da je zadatak bio sljedeći:
$broj = ((0.7 + 0.1) * 10);
dobili bismo zaista 8.
Trik je što je to precision issue i zašto s 0.7 + 0.1 dobijemo 0.799999999 i zato ti preporučam da pročitaš ovaj drugi link koji je creatifcode poslao ako te već zanima. Jeste duži tekst, ali se odnosi zapravo na sve jezike a ne samo PHP pa će ti biti korisno štivo.
btw. ajde da vidimo tko će znati riješiti sljedeći zadatak, bez varanja naravno:
$broj = (int) ((0.6 + 0.1) * 10);