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?