Foros del Web » Programando para Internet » PHP »

Resta en PHP

Estas en el tema de Resta en PHP en el foro de PHP en Foros del Web. Código PHP: //Si restamos : $valor1  =  160.70 ; $valor2  =  160.60 ; echo  $valor1  -  $valor2 ; //Lo logico es que me de: 0.10, pero en realidad me da 0.099999999999994, y no entiendo pq, alguna duda?? No vale redondear ,  ya que en la calculadora normal / cientifica sale 0.10 ...
  #1 (permalink)  
Antiguo 21/09/2018, 16:52
hmv
 
Fecha de Ingreso: abril-2005
Mensajes: 320
Antigüedad: 13 años, 8 meses
Puntos: 0
Busqueda Resta en PHP

Código PHP:
//Si restamos :

$valor1 160.70;
$valor2 160.60;

echo 
$valor1 $valor2;

//Lo logico es que me de: 0.10, pero en realidad me da 0.099999999999994, y no entiendo pq, alguna duda??
No vale redondearya que en la calculadora normal/cientifica sale 0.10 
  #2 (permalink)  
Antiguo 21/09/2018, 19:18
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.982
Antigüedad: 5 años, 5 meses
Puntos: 376
Respuesta: Resta en PHP

Cita:
Iniciado por hmv Ver Mensaje
Código PHP:
//Si restamos :

$valor1 160.70;
$valor2 160.60;

echo 
$valor1 $valor2;

//Lo logico es que me de: 0.10, pero en realidad me da 0.099999999999994, y no entiendo pq, alguna duda??
No vale redondearya que en la calculadora normal/cientifica sale 0.10 
Esto es perfectamente normal, debes de saber que el almacenamiento interno de cantidades fraccionarias es aproximada así que en operaciones de punto flotante lo que te regresa el lenguaje es lo mas aproximado a tu resultado.
Es decir que tienes una perdida, por lo cual te guste o no tienes que redondear la cantidad para obtener el resultado esperado.

Soluciones existen varias dependiendo de lo que necesites
Código PHP:
Ver original
  1. $valor1 = 160.70;
  2. $valor2 = 160.60;
  3.  
  4.  
  5. echo $valor1 - $valor2 . '<br>';
  6.  
  7. //Soluciones
  8. echo round($valor1 - $valor2, 2) . '<br>';
  9.  
  10. echo number_format($valor1 - $valor2, 2) . '<br>';
  11.  
  12. echo bcsub($valor1, $valor2, 2);
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.



La zona horaria es GMT -6. Ahora son las 12:42.