We have an API that returns prices as string in EUR, e.g. 2.55
or 0.035
. Our database however saves this in cents, so I wrote a really simple method to transform this into cents by just doing
$cents = (int) ((float) $value['value']['amount'] * 100)
So for this code
echo (int) ((float) '2.55' * 100);
the result should be 255
, right? But somehow, it's 254
. You can test this on your CLI by simply doing
php -r "echo (int) ((float) '2.55' * 100);"
When I get the result of (float) '2.55' * 100)
it's simply 255
, and when I cast this to int it's 255
, why isn't it the same if I cast it to int in the same call?
I mean, I could simply do '2.55' * 100
and the php casting would calculate this correctly, but I'm still curious why this happens?
Version:
PHP 7.1.15-1+ubuntu16.04.1+deb.sury.org+2 (cli) (built: Mar 6 2018 11:10:13) ( NTS )