Компьютерная неточность JS Есть проблема - иногда клиентам не добавляет копейку
Например при попытке умножить 299 на 8.655 (доллары и курс) получается 2587.845 . Что бы правильно округлить используется Math.round(x * 100)/100. Проблема возникает тогда, когда умножаешь 2587.845 на 100, получается 258784.49999999997, что при округлении даёт 2587.84
Посоветуйте пожалуйста каким способом вы решаете эти проблемы? Какая нибудь математическая либа, которая относится к числам как к строкам? mathjs не помогает
Текущее решение - перенести важные вычисления на более точный бэкэнд
Код для примераvar x = 299 * 8.655
console.log(x, Math.round(x * 100)/100, x * 100
>>> 2587.845, 2587.84, 258784.49999999997

21 Авг 2019 в 06:14
126 +1
0
Ответы
1

Для точных операций с десятичными числами в JavaScript, можно использовать библиотеку Decimal.js. Эта библиотека позволяет проводить арифметические операции с десятичными числами без потери точности.

Пример использования Decimal.js:

const Decimal = require('decimal.js')
Decimal.set({ precision: 8 }); // Установка точности, если необходим
let x = new Decimal(299).times(8.655)
console.log(x.toString()); // Выводит 2587.84
let roundedX = x.toDecimalPlaces(2)
console.log(roundedX.toString()); // Выводит 2587.85

В данном примере мы используем Decimal.js для умножения чисел с высокой точностью и округления до двух знаков после запятой.

Подключить Decimal.js можно либо через npm:

npm install decimal.js

Либо можно вставить скрипт прямо в свой HTML файл:

<script src="https://cdn.jsdelivr.net/npm/decimal.js@10.3.1/decimal.js"></script>

Надеюсь, это поможет вам решить проблему с неточностью при вычислениях в JavaScript.

20 Апр в 13:21
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 90 620 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир