2011-11-02 18 views
8

Sıkıştırılmış bir veri dizesini JSON'a ayrıştıran bir sistem kurdum. Kimlik depolamak için 19 basamaklı bir sayı kullanıyorum. Ne yazık ki, 17 haneden daha büyük bir sayı olan parseFloat(), son birkaç basamağı yuvarlar.Parse Float yuvarlama limiti var mı? Bunu nasıl düzeltebilirim?

Bu, tüm veri dizesini bozar. Bunu tamir edebilir miyim? Örneğin, 8246295522085275215, 8246295522085276000'a dönüştürülür.

Bu neden? belli bir değerden yüksek ise JavaScript

http://jsfiddle.net/RobertWHurst/mhZ7Q/

+0

don O kadar çok nesne var, değil mi? Daha sonra '1' ile başlayan düzenli artışlı kimlikler kullanın. Kişinin kimliğini değiştirerek başka nesneler almasını engellemek istiyorsanız, bazı rastgele değerler içeren ek bir argüman ekleyin - daha sonra uygun bir kimlik (veritabanınızda birincil anahtar olarak da kullanabilirsiniz) ve kullanıcı denediğinde Diğer öğelerin rastgele bir dizesini bilmediğinden URL’yi şans dışı bırakmak için. – ThiefMaster

+1

Eğer bu bir id idiyse, neden bir sayı olarak davranmak zahmetlidir? sadece bir dizge olarak sakla –

cevap

12

JavaScript'in yalnızca bir IEEE 754 çift duyarlıklı floating-point numaralı sayısal türü vardır. Yani, en fazla 15 bitlik bir hassasiyete sahip maksimum 52 bite sahip olursunuz.

Bundan daha fazla hassasiyete ihtiyacınız varsa, bir bignum kitaplığı kullanmanız veya dizelerle çalışmanız gerekir.

1

ikiye 2. Bölünmüş numaranı bir dize bu 1. Kullanım birini deneyin ve bir dizi 3. bignum kütüphane 4. daha küçük bir sayı daha küçük parçalar kaydetmek eğer yapabilirsiniz