Foros del Web » Programando para Internet » Javascript »

Resta de Float, error en decimales

Estas en el tema de Resta de Float, error en decimales en el foro de Javascript en Foros del Web. Hola chicos, estoy sumando dos Checkbox magicamente me econtre con un erro: la suma de ambos Float, es correcta, pero cuando resto uno aparecen varios ...
  #1 (permalink)  
Antiguo 26/12/2011, 19:49
Avatar de SirDuque  
Fecha de Ingreso: febrero-2009
Ubicación: Paso del Rey, Buenos Aires, Argentina
Mensajes: 975
Antigüedad: 15 años, 9 meses
Puntos: 89
Información Resta de Float, error en decimales

Hola chicos, estoy sumando dos Checkbox

magicamente me econtre con un erro:

la suma de ambos Float, es correcta, pero cuando resto uno aparecen varios decimales, como si fuera un divicion.

Ak el codigo:


Código HTML:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  4. <title>Documento sin t&iacute;tulo</title>
  5. </head>
  6.  
  7. <script language="javascript">
  8. <!--
  9. function Suma(isChecked, myValue)
  10. {
  11.     tot = parseFloat(document.form1.total.value);
  12.     myValue = parseFloat(myValue);
  13.     if (isChecked) document.form1.total.value = tot + myValue;
  14.     else document.form1.total.value = tot - myValue;
  15. }
  16. //-->
  17. <form name="form1">
  18. <tr><td><input name="checkbox" type="checkbox" onClick="Suma(this.checked,this.value)" value="191.17"></td></tr>
  19. <tr><td><input name="checkbox2" type="checkbox" onClick="Suma(this.checked,this.value)" value="277.93"></td></tr>
  20. <tr><td colspan="4" align="center" valign="middle"><input name="total" type="text" value="0.00"></td></tr>
  21.  </form>
  22. </body>
  23. </html>

al hacer clic en cada checkbox el resultado es:

469.1

cuando saco check al primero el resultado es:

277.93000000000006

despues saco check al segundo el resultado es:

5.684341886080802e-14

No le encuento sentido.

Y cuando los vuelvo a sumar, el resultado esta OK

469.1

Prove con .toFixed(2) pero no hay caso. ignora el comando.
Les agradesco cualquier ayuda!
__________________
Mono programando!
twitter.com/eguimariano
  #2 (permalink)  
Antiguo 26/12/2011, 22:46
Avatar de dggluz  
Fecha de Ingreso: abril-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 525
Antigüedad: 15 años, 7 meses
Puntos: 50
Respuesta: Resta de Float, error en decimales

Parece ser simplemente un problema de los números flotantes (en JavaScript todos los números son flotantes de 64 bits, pero para las operaciones con enteros se aplica automáticamente un algoritmo de corrección). Fíjate en este artículo; una posible solución a tu problema, la puedes encontrár aquí. ¡Suerte!
  #3 (permalink)  
Antiguo 28/12/2011, 06:06
Avatar de SirDuque  
Fecha de Ingreso: febrero-2009
Ubicación: Paso del Rey, Buenos Aires, Argentina
Mensajes: 975
Antigüedad: 15 años, 9 meses
Puntos: 89
Respuesta: Resta de Float, error en decimales

Solucion:

Código Javascript:
Ver original
  1. <!--
  2. function Suma(isChecked, myValue)
  3. {
  4.     tot = parseFloat(document.form1.total.value);
  5.     myValue = parseFloat(myValue);
  6.     if (isChecked) document.form1.total.value = tot + myValue;
  7.     else document.form1.total.value = (tot - myValue).toFixed(2);
  8. }
  9. //-->
__________________
Mono programando!
twitter.com/eguimariano

Etiquetas: float, html, input, resta
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:08.