with parselong number length float decimals convert javascript numbers

number - parselong javascript



JavaScript agregando nĂºmeros decimales (4)

Este es un problema común con los puntos flotantes.

Use para toFixed en combinación con parseFloat .

Aquí hay un ejemplo en JavaScript.

Esta pregunta ya tiene una respuesta aquí:

Así que estoy haciendo una secuencia de comandos que agrega dos números (números decimales) juntos, que he encontrado un problema.

http://jsfiddle.net/DerekL/esqnC/

Hice el guión, resulta bastante bueno:

0.1 + 0.5 //0.6 0.2 + 0.3 //0.5

Pero pronto veo:

0.1 + 0.2 //0.30000000000000004 0.01 + 0.06 //0.06999999999999999

Y no me parece bien. Sé que es un defecto utilizar el punto de flotación con bits finitos, pero no puedo encontrar la forma de solucionarlo.

Math.ceil //No Math.floor //No .slice //No

ACTUALIZAR

¿Es posible multiplicar primero los números por 1000, luego agregarlos y luego dividirlos por 1000?


Use para toFixed para convertirlo en una cadena con algunos lugares decimales recortados, y luego convertirlo de nuevo a un número.

+(0.1 + 0.2).toFixed(12) // 0.3

Parece que IE toFixed tiene un comportamiento extraño, por lo que si necesitas soportar IE algo así podría ser mejor:

Math.round((0.1 + 0.2) * 1e12) / 1e12


function add(){ var first=parseFloat($("#first").val()); var second=parseFloat($("#second").val()); $("#result").val(+(first+second).toFixed(2)); }

MANIFESTACIÓN.


Probando este Javascript:

var arr = [1234563995.721, 12345691212.718, 1234568421.5891, 12345677093.49284]; var sum = 0; for( var i = 0; i < arr.length; i++ ) { sum += arr[i]; } alert( "fMath(sum) = " + Math.round( sum * 1e12 ) / 1e12 ); alert( "fFixed(sum) = " + sum.toFixed( 5 ) );

Conclusión

No use Math.round( (## + ## + ... + ##) * 1e12) / 1e12

En su lugar, use ( ## + ## + ... + ##).toFixed(5) )

En IE 9, toFixed funciona muy bien.