Вячеслав Перскийцитирует6 месяцев назад
Ошибки округления чисел с плавающей точкой — хорошо известное явление, которое существует практически в любом языке программирования. Для того чтобы понаблюдать его в JavaScript, выполните следующий код:

const sum = 0.1 + 0.2;

console.log(sum); // выведет 0.30000000000000004

Мы не можем избежать ошибки округления, но можем свести ее к минимуму. При работе с денежными суммами в определенной валюте (например, в долларах) можно умножать все значения на 100, чтобы не иметь дела с дробными величинами. Вместо того чтобы писать такой код:

const currentBalance = 5382.23;

const transactionAmount = 14.02;

const updatedBalance = currentBalance — transactionAmount;

// Теперь updatedBalance = 5368.209999999999

лучше использовать следующие переменные для денежных сумм:

const currentBalanceInCents = 538223;

const transactionAmountInCents = 1402;

const updatedBalanceInCents = currentBalanceInCents - transactionAmountInCents;

// Теперь updatedBalanceInCents = 536821

Этот прием решит проблему для тех операций, которые работают с целыми числами без потери точности, такими как сложение и вычитание количества центов. Но что будет, если понадобится вычислить налог или доход в процентах? Результатом этих операций в любом случае будут дробные значения. Придется делать то же самое, что делают в таких случаях предприятия и банки, — округлять значения сразу после транзакции:

const costInCents = 4899;

// Вычислить налог в 11 % и округлить результат

// до ближайшего целого числа центов

const costWithTax = Math.round(costInCents*1.11);
  • Войти или зарегистрироваться, чтобы комментировать