2011-12-27 17 views
6

long ve List<string> özelliklerine sahip bir nesne döndüren bir WCF hizmet işlemim var. Bir WCF uygulamasında işlemi test ettiğimde, her şey iyi çalışıyor ve değerler doğru. Ancak jQuery ve JSON formatını kullanarak servisi aramam gerekiyor. long özelliğinin değeri, OnSucceed işlevinde geri okuduğumda değişiyor.JSON.Stringify() büyük sayılardaki sayısal değeri mi değiştiriyor?

Aradıktan sonra, JSON.stringify'un büyük değerleri değiştirdiğini buldum. Böyle kodunda Yani:

alert(JSON.stringify(25001509088465005)); 

... o 25001509088465004 olarak değerini gösterecektir.

Neler oluyor? Burada

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

+0

Lütfen sorunuzun daha net olmasını sağlayın. –

+0

Sadece yukarıdaki javascript kodunu test edin ve neleri gönderdiğinizi ve hangi JSON.stringify'ın geri döndüğünü görün. –

+2

Javascriptlerin hassas sınırı nedeniyle Sayı tipi. Ayrıca bakınız: http://stackoverflow.com/questions/588004/is-javascripts-math-broken – mbarkhau

cevap

4

JavaScript IEEE-754 çift kesinlikli (64 bit) biçimini kullanarak sayılarını gösterir. Anladığım kadarıyla, bu size 53 bit hassas veya on beş ila on altı ondalık basamak verir. Numaranızın JavaScript'in üstesinden gelebileceğinden daha fazla rakam var, bu yüzden bir yaklaşmayla sonuçlanacaksınız.

Bu büyük sayıdaki matematik işlemlerini mi yapmak istiyorsunuz? Çünkü eğer onun sadece bir tür kimliği ise onu bir ip gibi geri döndürüp problemden kaçabilirsiniz.

+0

Evet ama bunu çok istedim ama sonunda onu ip olarak aldım ve bu da bunun sonu. –

+0

JavaScript'te "uzun" veri türü yok, yalnızca Numara. –

+0

Evet, açıkça belirtmeliydim "JavaScript, _all_ sayıları kullanarak ..." – nnnnnn

İlgili konular