Этот вопрос закрыт для ответов, так как повторяет вопрос Почему в JS 0.1+0.2 не равно 0.3?
Demigodd
@Demigodd

Как бороться с десятичными числами(Decimal)?

Раньше была такая ситуация, что при сумироваий различных чисел Javascript не правильно их рассчитал.
Так как неправильность рассчетев в основном легла на 11-13 знаков после запятой, то решением было округлить числа до 10 знаков после запятой.

Пример кода
function bookSum(books) {
  let sum = books.map((book) => book.price).reduce((acc, price) => acc + price, 0)
  return Number(sum.toFixed(10));
}


Но вот недавно возникла такая ситуация, что неправильно выдает 9`ый знак после запятой.
4753632.03+1928767.61+1039533.49+49312.87
// Javascript calculator = 7771246.000000001
// Google calculator = 7771246


Существует ли идеальный способ решить данную проблему ?

Edit:
Да согласен данную проблему трудно решить, а иногда и невозможно.
Но как хотя бы добиться до десятой точности(10 правильных знаков после запятой) ?
Как в этом случае Google Calculator правиьно рассчитал ?
  • Вопрос задан
  • 124 просмотра
Решения вопроса 3
dollar
@dollar
Делай добро и бросай его в воду.
Самый надежный способ - использовать только целые числа для внутреннего представления. Особенно актуально для валют.
А уже при выводе в интерфейс пользователя делить на 100 или иным хитрым способом вставлять точку.
Ответ написан
@architawr
"Ok, Google" и все твои проблемы решены
sergski
@sergski
web-developer
const i = 1e12;
const arr = [4753632.03, 1928767.61, 1039533.49, 49312.87];
let result =  arr.reduce( (sum, curr) => {
  return sum + curr * i;
} , 0);
result = result / i; // 7771246
Ответ написан
Ваш ответ на вопрос

Вопрос закрыт для ответов и комментариев

Потому что уже есть похожий вопрос.
Похожие вопросы