#Fixed 11: Solucionado error redondeo con números en PHP
Vengo hoy aquí, después de mucho tiempo, a dejar anotado el error y la solución (al menos la que he encontrado) para un problema de redondeo de números enteros y decimales que ocurre en PHP.
El problema es de esos que te vuelven un poco loco, de esos que ocurren unas veces sí y otras no. Antes de nada, decir que ya me ocurrió con la versión 7.4 de PHP y ahora me ha ocurrido con la versión 8.2.
El error me ha ocurrido en una aplicación al realizar una operación sencilla: 1.13 *100. El resultado que debiéramos obtener es bastante obvio: 113. Pues no, en PHP los números que tienen una representación finita en base 10 pueden no tener una representación exacta en representación decimal por lo que en este caso el resultado es un “pelín” distinto.

Efectivamente, el resultado no se representa correctamente ya que nos da un 112.99999999999998579. ¿Qué problema puede ocasionarnos esto? pues que si aplicamos un casting a enteros con (int) el resultado obtenido tenemos:

Es decir, donde deberíamos tener un 113 ahora tenemos un 112. Fail total y absoluto.
Solución: Pues después de buscar por internet (he perdido la página donde encontré realmente la solución) resulta que podemos hacer uso de la función bcmul de forma que si lo aplicamos en este ejemplo de la siguiente forma:

Tenemos el resultado correcto:

Otro ejemplo con el que obtenemos un error es con la operación: (3*5)+21%. El resultado correcto de la operación es 18,15 pero si no aplicamos bcmul PHP nos retorna 18,14, más concretamente 18.14999999999999858. Si aplicamos bcmul de forma correcta como he indicado más arriba obtenemos los 18,15 finales que deben ser.
Así que, aunque solo sea para mi mismo, dejo anotado el error y la solución en este artículo porque seguramente en un futuro vuelva por aquí a consultarlo.
Eso es todo, cualquier comentario, sugerencia o corrección es bienvenida.
¡Chimpún!