Entendiendo el problema de los decimales en PHP
Filosofía del lenguaje: es fundamental comprender que PHP es un lenguaje que prefiere la comodidad sobre la precisión. Esto significa que PHP hará lo posible para acomodar y continuar ejecutándose incluso en situaciones donde otros lenguajes arrojarían errores.
echo(0.1 + 0.7); // Devuelve 0.8 en otros lenguajes, pero 0.7999999999999999 en PHP.
¿A qué se debe este comportamiento?
Este particular problema con decimales en PHP es debido a la manera en que PHP (y otros muchos lenguajes de programación que usan la norma IEEE 754 para aritmética de punto flotante) representan los números decimales.
echo(0.1 + 0.2); // Devuelve 0.3 en otros lenguajes, pero 0.30000000000000004 en PHP.
Manejo de decimales en PHP – Soluciones
Aumentar la precisión: PHP proporciona funciones para cambiar la precisión de los decimales. Sin embargo, hay que tener cuidado con aumentar demasiado la precisión ya que esto puede consumir recursos adicionales.
ini_set('precision', 14); echo(0.1 + 0.2); // Devuelve 0.3
Arquitectura de software de punto flotante: Otra posible solución es usar software de arquitectura de punto flotante, como BCMath o GMP. Estas bibliotecas manejan los números decimales de una manera diferente, y no padecen del problema de precisión decimal.
echo(bcadd('0.1', '0.7', 1)); // Devuelve 0.8
Evitando problemas de decimales en PHP
Redondeo: Para evitar cualquier problema con decimales, una buena práctica en PHP es redondear los valores al número de decimales que interesan.
echo(round(0.1+0.7, 2)); // Devuelve 0.8