Компьютерная неточность 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
147 +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.845
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 Апр 2024 в 13:21
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир