JavaScript Zaqokrąglanie powyżej 15 cyfr w liczbie

Odpowiedz Nowy wątek
2016-03-24 13:59
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?

nie wierzę, że nie znalazłeś żadnej biblioteki do BigNum - Maciej Cąderek 2016-03-24 14:38
Znalazłem ale ze wszystkim miałem jakieś problemy, dlatego tu napisałem. Szukałem bardziej BigInt, poszukam jeszcze po BigNum. Napisałem bo już straciłem trochę na to czasu a pomyślałem, że może korzystacie z czegoś sprawdzonego i bezproblemowego. - janeks 2016-03-24 14:58

Pozostało 580 znaków

2016-03-30 17:14
Mateusz1996
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

Wielkie dzięki za cenne rady, myślę, że się przydadzą. Problem chwilowo zostawiłem na później, mogłem sobie na to pozwolić, zająłem się innymi rzeczami. Jak do tego wrócę to dam znać co mi z tego wyszło, no chyba, że ktoś w międzyczasie coś podrzuci. - janeks 2016-03-30 22:58

Pozostało 580 znaków

2016-03-30 23:30

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

Działa :) Wielkie dzięki. Czuję, że należy się z mojej strony minimum dobre piwo :) - janeks 2016-04-04 01:53
Spoko, pewni mi się też to kiedyś przyda. - Maciej Cąderek 2016-04-04 01:55

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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