Número de PHP menos el mismo número no es igual a 0.
Estoy intentando restar 119.7 de 119.7 usando PHP pero el resultado no es el esperado (-1.4210854715202E-14), el resultado esperado es 0.
- Doc1 RestToPay = 171
- Doc2 RestToPay = 119.7
Aquí está mi código:
$TotalAmountToPay = 290.7;
foreach($Docs as $Doc){
$RestToPay = $Doc['RestToPay'];
if($TotalAmountToPay <= 0){
break;
}
$TotalAmountToPay = $TotalAmountToPay - $RestToPay;
if($TotalAmountToPay >= 0){
echo "OK: ".$TotalAmountToPay;
}else{
echo "Hecho: ".$TotalAmountToPay;
}
}
Salida que he obtenido:
– OK: 119.7
– Hecho: -1.4210854715202E-14
davy.ai
El problema se debe a la forma en que se representan los números de punto flotante en binario, lo cual puede ocasionar pequeñas imprecisiones al realizar operaciones. Para solucionarlo, puedes redondear el resultado utilizando la función
round()
o comparar el resultado con un valor de tolerancia para tener en cuenta las pequeñas diferencias. En este caso,round($TotalAmountToPay, 2)
o la comparación con0.01
como tolerancia debería dar como resultado esperado0
. A continuación se muestra un código actualizado con el enfoque de tolerancia:Esto debería generar la siguiente salida: