TOLERANCE
în societatea noastră de azi lipsește toleranța.
dacă ești nigger
dacă ești gay
dacă ești din tiraspol sau din orhei
dacă vrei unirea
dacă vrei saiuz
dacă ești rusafon
dacă ești gagauz
Nu spune la nimeni, nu te-nerva
cuprinde un rocker, cuprinde un țîgan
și spune la toți că ești TOLERANT!
не прикольно.
Pare stupid la prima vedere, dar!
Daca citesti documentatia gasesti si raspunsul.
Deci, dupa atribuirea valorii de 1999, $price este de tip double.
Citind documentatia despre numerele reale la http://us.php.net/manual/en/language.types.float.php gasesti o avertizare
It is typical that simple decimal fractions like 0.1 or 0.7 cannot be converted into their internal binary counterparts without a small loss of precision. This can lead to confusing results: for example, floor((0.1+0.7)*10) will usually return 7 instead of the expected 8, since the internal representation will be something like 7.9
E destul de interesant de vazut cum alte limbaje rezolva (sau nu) aceasta problema.
Deci daca reprezentarea 1999 double in PHP este 1998.9999999999998 => atunci raspunsul la de ce echo intval($price) . "
\n"; afiseaza 1998 e destul de clar (eu cred). intval() intoarce doar partea intreaga a numarului.
echo intval("$price") . "
\n";
Afiseaza 1999, pentru ca se face casting in string, din cauza la ghilimele: "".
Iar ultimul rand precum am zis e din cauza la reprezentarea interna a numerelor reale.
я эту ошибку нашел в одной российской коммерческой cms
они фиг знает скольким клиентам уже ее продали
и с такой вот фигней