php intval () y floor () devuelven un valor demasiado bajo?

Debido a que el tipo de datos flotantes en PHP es inexacto, y un FLOTADOR en MySQL ocupa más espacio que un INT (y es inexacto), siempre almaceno los precios como INT, multiplicando por 100 antes de almacenar para asegurarnos de tener exactamente 2 lugares decimales de precisión. Sin embargo, creo que PHP se está portando mal. Código de ejemplo:

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>";

Salida producida:

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

Me sorprendió. Cuando el resultado final fue inferior al esperado en 1, esperaba que el resultado de mi prueba se pareciera más a:

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

que demostraría la inexactitud del tipo flotante. Pero, ¿por qué el piso (115) devuelve 114?

Respuestas a la pregunta(5)

Su respuesta a la pregunta