Непонятное округление числа в Javascript [дубликат]

123
11 ноября 2019, 21:20

На данный вопрос уже ответили:

  • Отображение числа 9223372036854775807 3 ответа

Есть у меня в базе в колонке значение, например, 8722879621216817228, но при вытягивании обычным запросом из базы, последние три цифры превращаются в ноль -> 872287962121681700. Но и не только с базой эта проблема у меня возникает, она везде присутствует.

let a = 8722879621216817228;
console.log(a); //8722879621216817000

Как быть с данной проблемой, может кто-то ссылку на документацию знает, то буду благодарен, так как я ничего не нашёл по данной ситуации.

Answer 1

Вопрос, на который сослался модератор, закрывший этот вопрос как дубликат, хоть и содержит 3 ответа, однако несет мало информации о решении этой проблемы в разрезе javascript.

В javascript Number, без потери точности, может быть не больше 253-1 Number.MAX_SAFE_INTEGER или меньше 1-253 Number.MIN_SAFE_INTEGER

Есть метод для проверки попадания числа в указанный диапазон:

Number.isSafeInteger()

console.log(Number.isSafeInteger(8722879621216817)) 
console.log(Number.isSafeInteger(872287962121681722800))

Сравнительно недавно появился BigInt

BigInt  - позволяет использовать большие числа с высокой точностью

Чтобы создать BigInt, добавьте суффикс n в любой целочисленный литерал. Например, 123 становится 123n. Глобальную функцию BigInt можно использовать для преобразования обычного числа в BigInt. Другими словами, BigInt (123) === 123n.

Чтобы получить BigInt со значением больше 253 в конструктор BigInt() можно передать строку содержащую число в десятичном формате.

    let n1 =                    "123456789123456789"; 
    let n2 = "1234567891234567890000000000000000000" 
    console.log(BigInt(n1).toString()); 
    console.log(BigInt(n2).toString()) 
    console.log((BigInt(n1)+BigInt(n2)).toString())

Поддержка, на 7 марта 2019, судя по MDN такая:

10.4.0 node.js
67     Chromium
65     Firefox
54     Opera
--     Edge
--     IE
--     Safari
--     Firefox Android

Для длинной арифметики, не зависящей от окружения можно использовать решения на чистом javascript, вотнекоторые из них:

bignuber.js

decimal.js

big.js

READ ALSO
sequelize без ассоциации

sequelize без ассоциации

Подскажите пожалуйста

143
Как привязать autonumeric ко всем элементам

Как привязать autonumeric ко всем элементам

Не могу разобраться, autoNumeric работает только на первый элемент содержащий класс float, как сделать что бы сработало на всех элементах имеющих...

126
Воспроизвести 2+ видео на странице kurento

Воспроизвести 2+ видео на странице kurento

Возможно ли запустить 2 PlayerEndpoint с разными ссылками на одной странице? https://doc-kurentoreadthedocs

119
Не могу запустить MySQL CentOS 7

Не могу запустить MySQL CentOS 7

Добрый день StackOverflow

126