2011-11-02 9 views
8

Konfiguruję system, który analizuje zwarty ciąg danych w JSON. Używam 19-cyfrowej liczby do przechowywania identyfikatorów. Niestety każda liczba większa niż 17 cyfr, parseFloat() zaokrągla kilka ostatnich cyfr.Parse Float ma limit zaokrąglania? Jak mogę to naprawić?

Powoduje to przerwanie całego ciągu danych. Czy mogę to naprawić?

Na przykład 8246295522085275215 zostaje zmieniony na 8246295522085276000. Dlaczego to?

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

+0

don nie ma tylu obiektów, prawda? Następnie użyj zwykłych inkrementujących identyfikatorów zaczynających się od '1'. Jeśli chcesz uniemożliwić innym możliwość pobrania innych obiektów poprzez zmianę identyfikatora, dodaj dodatkowy argument zawierający pewną losową wartość - możesz nadal używać właściwego identyfikatora (także w bazie danych jako klucza podstawowego) i gdy użytkownik próbuje aby zmodyfikować adres URL, do którego nie ma szczęścia, ponieważ nie zna losowego ciągu innych elementów. – ThiefMaster

+1

jeśli jest to identyfikator, dlaczego w ogóle traktujesz go jako numer? po prostu zachowaj go jako ciąg –

Odpowiedz

12

JavaScript ma tylko jeden typ numeryczny, który jest podwójną precyzją IEEE 754 floating-point. Oznacza to, że masz maksymalnie 52 bity precyzji, czyli nieco więcej niż 15 miejsc po przecinku.

Jeśli potrzebujesz więcej precyzji niż ta, musisz użyć biblioteki bignum lub pracować z ciągami.

1

spróbować jednego z tych 1. użyć ciągu 2. Podział swój numer w dwóch i zapisać mniejsze części do tablicy 3. Bignum biblioteki 4. Zastosowanie mniejszej liczby, jeśli możesz