php intval () e floor () retornam valor muito baixo?

Como o tipo de dados flutuantes no PHP é impreciso e um FLOAT no MySQL ocupa mais espaço que um INT (e é impreciso), eu sempre armazeno preços como INTs, multiplicando por 100 antes de armazenar para garantir que tenhamos exatamente 2 casas decimais de precisão. No entanto, acredito que o PHP está se comportando mal. Código de exemplo:

echo "<pre>";

$price = "1.15";
echo "Price = ";
var_dump($price);

$price_corrected = $price*100;
echo "Corrected price = ";
var_dump($price_corrected);


$price_int = intval(floor($price_corrected));
echo "Integer price = ";
var_dump($price_int);

echo "</pre>";

Saída produzida:

Price = string(4) "1.15"
Corrected price = float(115)
Integer price = int(114)

Eu estava surpreso. Quando o resultado final foi menor que o esperado em 1, eu esperava que a saída do meu teste parecesse mais com:

Price = string(4) "1.15"
Corrected price = float(114.999999999)
Integer price = int(114)

que demonstraria a imprecisão do tipo de flutuação. Mas por que o piso (115) está retornando 114

questionAnswers(5)

yourAnswerToTheQuestion