Descripción del problema
Se tiene una interfaz de lado cliente donde de manera automática se realiza el cálculo de un valor el cuál maneja números flotantes, hasta aquí todo bien, el problema viene cuando ese valor se envía por medio de Ajax al Backend para ser procesado, este valor viaja como tipo String y con 12 decimales después del punto. Entonces cuando llega al servidor aún así nosotros apliquemos un “(float)” o “floatval()” por alguna extraña razón al momento de comparar ese valor con uno idéntico en Backend nos indica que no son iguales, por ejemplo:
$input_cliente: “25249.629999999997“
$valor_backend: 25249.63
Si nosotros aplicamos:
$float_input = (float) $input_cliente;
O aplicamos
$float_input = floatval($input_cliente);
echo $input_cliente;
El valor de salida es el siguiente: 25249.63
Pero si hacemos la comparación:
if ($float_input == $valor_backend){
echo "Si son iguales";
} else {
echo "No son iguales";
}
El valor de salida es: No son iguales
Es muy probablemente que aunque sí nos da un valor de salida correcto por así decirlo, internamente sigue conteniendo los decimales “extras” y por esta razón en la comparación nos dice que no son iguales, pues bien, ahora la solución…
1- Desde la interfaz del cliente podemos convertir el valor que se envía al Backend con JavaScript:
var input_cliente = valor.toFixed(2);
2- En el mismo Backend usando la función “number_format” de la siguiente manera:
$float_input = (float) number_format($input_cliente,2,".","");
Si con esto no te funciona, puedes probar “castear” los datos primero a un mismo tipo como String y después a Float:
$float_valor_backend = floatval((string) $valor_backend);
$float_input = floatval((string) number_format($input_cliente,2,".",""));
Si tienes este mismo problema usa cualquiera de las dos opciones y de paso dales un leída para saber que estás haciendo, no solo copies y pegues.
Recuerda que si te sirvió el contenido déjanos tu comentario bye.




Deja un comentario