JavaScript Zaqokrąglanie powyżej 15 cyfr w liczbie

0

Duże liczby są zaokrąglane. Problem zauważyłem przy JSON.parse ale teraz widzę, że tu nie chodzi tylko o parsowanie.

	var bint = 999999999999999999;
	console.log(bint);

wynik: 1000000000000000000

Znalazłem trochę kodu do tego ale pod nodejs, próbowałem to przerabiać na javascript ale dopadły mnie problemy, np. różnice w require (asynchroniczne w JavaScript).
Czy macie na to sprawdzony sposób, może ktoś mi pomóc?

1

Problem leży w samej naturze tego języka i jak pobawisz się tym trochę to możesz znaleźć parę "bugów" np ".6 + .3" i w cale nie da .9 jak każdy się by domyślał. Takich liczb najlepiej unikać i najlepiej weryfikować to poprzez bint > Number.MAX_SAFE_INTEGER || bint < Number.MIN_SAFE_INTEGER i jak ci zwróci TRUE to znaczy że stracisz na dokładności można było by pokombinować i trzymać takie wartości jako Int8Array ale nie daję pewności, że to dobrze zadziała

1

Sprawdziłem https://github.com/peterolson/BigInteger.js - działa bezproblemowo:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Example</title>
    </head>
    <body>

        <script src="http://peterolson.github.com/BigInteger.js/BigInteger.min.js"></script>
        <script>
            var testJSON = '{"bigInt": "999999999999999999", "anotherBigInt": "9999999999999999999999999999"}',
                parsedJSON = JSON.parse(testJSON);

            console.log(bigInt(parsedJSON.bigInt).add(parsedJSON.anotherBigInt).toString());
        </script>
    </body>
</html>

CodePen: http://codepen.io/anon/pen/KzvGqe?editors=0012

1 użytkowników online, w tym zalogowanych: 0, gości: 1