2011-12-27 26 views
6

Tengo una operación de servicio WCF que devuelve un objeto con propiedades long y List<string>. Cuando pruebo la operación en una aplicación WCF, todo funciona bien y los valores son correctos. Sin embargo, debo poder llamar al servicio utilizando el formato jQuery y JSON. El valor de la propiedad long aparentemente cambia cuando lo leí en la función OnSucceed.JSON.Stringify() en números grandes ¿altera el valor numérico?

Después de buscar, he encontrado que JSON.stringify cambia los valores grandes. Así que en código como este:

alert(JSON.stringify(25001509088465005)); 

... se mostrará el valor como 25001509088465004.

¿Qué está pasando?

demo aquí: http://jsfiddle.net/naveen/tPKw7/

+0

Por favor haga su pregunta más clara. –

+0

simplemente Pruebe el código de JavaScript anterior y vea lo que ha enviado y lo que ha devuelto JSON.stringify. –

+2

Debido al límite de precisión de javascripts Tipo de número. Ver también: http://stackoverflow.com/questions/588004/is-javascripts-math-broken – mbarkhau

Respuesta

4

JavaScript representa números usando IEEE-754 formato de doble precisión (64 bits). Según tengo entendido, esto le da una precisión de 53 bits, o de quince a dieciséis dígitos decimales. Su número tiene más dígitos de los que JavaScript puede manejar, por lo que termina con una aproximación.

¿Necesita hacer operaciones matemáticas en este gran número? Porque si es solo un tipo de ID, puede devolverlo como una cadena y evitar el problema.

+0

sí, pero quería tenerlo tanto tiempo, pero finalmente lo recibo como una cadena y este es el final de eso. –

+0

No hay un tipo de datos "largo" en JavaScript, solo Número. –

+0

Sí, debería haber dicho explícitamente "JavaScript representa _todos los números usando ..." – nnnnnn

Cuestiones relacionadas