2011-12-27 10 views
6

Ho un'operazione di servizio WCF che restituisce un oggetto con le proprietà long e List<string>. Quando eseguo il test dell'operazione in un'applicazione WCF, tutto funziona correttamente e i valori sono corretti. Tuttavia, devo essere in grado di chiamare il servizio utilizzando il formato jQuery e JSON. Il valore della proprietà long si modifica apparentemente quando l'ho letto di nuovo nella funzione OnSucceed.JSON.Stringify() sui grandi numeri modifica il valore numerico?

Dopo la ricerca, ho riscontrato che JSON.stringify modifica i valori massimi. Quindi, in codice come questo:

alert(JSON.stringify(25001509088465005)); 

... mostrerà il valore come 25001509088465004.

Cosa sta succedendo?

Demo qui: http://jsfiddle.net/naveen/tPKw7/

+0

Per favore chiarisci la tua domanda. –

+0

Basta testare il codice javascript sopra e vedere cosa hai inviato e cosa ha restituito JSON.stringify. –

+2

A causa del limite di precisione dei javascript Tipo di numero. Vedi anche: http://stackoverflow.com/questions/588004/is-javascripts-math-broken – mbarkhau

risposta

4

JavaScript rappresenta numeri utilizzando IEEE-754 doppia precisione formato (64 bit). A quanto ho capito, questo ti dà una precisione di 53 bit o quindici o sedici cifre decimali. Il tuo numero ha più cifre di quante possano essere gestite da JavaScript, quindi ti ritrovi con un'approssimazione.

Hai bisogno di fare operazioni matematiche su questo grande numero? Perché se è solo una sorta di ID puoi restituirlo come una stringa ed evitare il problema.

+0

sì ma volevo averlo tanto tempo ma finalmente lo ricevo come stringa e questa è la fine di quello. –

+0

Non esiste un tipo di dati "lungo" in JavaScript, solo numero. –

+0

Sì, avrei dovuto dire esplicitamente "JavaScript rappresenta _all_ numeri usando ..." – nnnnnn

Problemi correlati