PHP Błąd w obliczeniach zmiennoprzecinkowych

amount=27296 string_amount=272.96

DziałanieZwracana wartość
floatval(string_amount)float(272.96)
floatval(string_amount*100)float(27296)
string_amount*100float(27296)
string_amount*1000000000float(272960000000)
(int)(string_amount*100)int(27295)
string_amount*100 == amountbool(false)
(int)(string_amount*100) == amountbool(false)
round(string_amount*100) == amountbool(true)
(int)(string_amount*100) >= 27295 and (int)(string_amount*100) < 27296bool(true)
(int)(string_amount*100) <= 27297 and (int)(string_amount*100) > 27296bool(false)

amount=27297 string_amount=272.97

DziałanieZwracana wartość
floatval(string_amount)float(272.97)
floatval(string_amount*100)float(27297)
string_amount*100float(27297)
string_amount*1000000000float(272970000000)
(int)(string_amount*100)int(27297)
string_amount*100 == amountbool(false)
(int)(string_amount*100) == amountbool(true)
round(string_amount*100) == amountbool(true)
(int)(string_amount*100) >= 27296 and (int)(string_amount*100) < 27297bool(false)
(int)(string_amount*100) <= 27298 and (int)(string_amount*100) > 27297bool(false)

amount=27295 string_amount=272.95

DziałanieZwracana wartość
floatval(string_amount)float(272.95)
floatval(string_amount*100)float(27295)
string_amount*100float(27295)
string_amount*1000000000float(272950000000)
(int)(string_amount*100)int(27295)
string_amount*100 == amountbool(true)
(int)(string_amount*100) == amountbool(true)
round(string_amount*100) == amountbool(true)
(int)(string_amount*100) >= 27294 and (int)(string_amount*100) < 27295bool(false)
(int)(string_amount*100) <= 27296 and (int)(string_amount*100) > 27295bool(false)

amount=17296 string_amount=172.96

DziałanieZwracana wartość
floatval(string_amount)float(172.96)
floatval(string_amount*100)float(17296)
string_amount*100float(17296)
string_amount*1000000000float(172960000000)
(int)(string_amount*100)int(17296)
string_amount*100 == amountbool(true)
(int)(string_amount*100) == amountbool(true)
round(string_amount*100) == amountbool(true)
(int)(string_amount*100) >= 17295 and (int)(string_amount*100) < 17296bool(false)
(int)(string_amount*100) <= 17297 and (int)(string_amount*100) > 17296bool(false)

amount=100960000001 string_amount=100.960000001

DziałanieZwracana wartość
floatval(string_amount)float(100.960000001)
floatval(string_amount*100)float(10096.0000001)
string_amount*100float(10096.0000001)
string_amount*1000000000float(100960000001)
(int)(string_amount*100)int(10096)
string_amount*100 == amountbool(false)
(int)(string_amount*100) == amountbool(false)
round(string_amount*100) == amountbool(false)
(int)(string_amount*100) >= 100960000000 and (int)(string_amount*100) < 100960000001bool(false)
(int)(string_amount*100) <= 100960000002 and (int)(string_amount*100) > 100960000001bool(false)