2012-06-20 10 views
5

Estoy haciendo un cálculo en script java pero estoy enfrentando un problema debido a la precisión en los números decimales. no puedo publicar el cálculo exacto, pero esto es lo que estoy haciendo lo que conduce a un resultado inesperadoResultado inesperado de Javascript

cuando escribo: alert(100.01-36.01); // resultado es 64

Pero cuando escribo: alert(100.01-37.01); // Resultado es 63.00000000000001

y sigue así para 38.01 .... así sucesivamente. ¿Puede ayudarme alguien por qué esto muestra un comportamiento tan inesperado? Estoy atrapado en un cálculo.

Gracias de antemano.

+2

Las máquinas no tienen una precisión infinita, por lo que siempre se debe tener cuidado al comparar valores de punto flotante, 64 es un número especial para una máquina, es una potencia de 2 por lo que puede representarlo bastante bien. –

+1

esto podría ayudarlo http://stackoverflow.com/questions/588004/is-javascripts-math-broken –

+2

Esto se ha pedido al menos un millón de veces en SO, utilice la búsqueda antes de publicar una pregunta. – Niko

Respuesta

1

Prueba esto:

 
<script type="text/javascript"> 
var n1 = parseFloat(100.01); 
var n2 = parseFloat(37.01); 
var res = (n1-n2) 
alert(res.toFixed(2)); 
</script> 
0

si no declara los números como números, js utilizará automática como cadena, si la cadena no sólo se utiliza por números.

parseFloat (123.45) lo establecerá como número decimal.

Cuestiones relacionadas