Ответ эксперта

В корзине и счёте расходятся суммы — почему и можно ли это доказать?

Вопрос по направлению: Экспертиза исходного кода на JavaScript

Ответ

Можно, и это частая задача. Обычные числа в JavaScript — двоичные с плавающей точкой, поэтому сложение и умножение сумм дают мелкие погрешности, зависящие от порядка операций. Отдельного десятичного типа для денег нет, хотя с 2020 года есть целочисленный тип произвольной точности BigInt: обычное число остаётся точным для целых лишь до предела Number.MAX_SAFE_INTEGER, а применять его или нет — решает разработчик. Эксперт не объявляет один способ правильным, а устанавливает, какой выбран у вас и к чему привёл.

Проверка идёт двумя разными сравнениями, и путать их нельзя. Первое: расчёт повторяют на ваших данных и сверяют с вашим же документом — это проверка происхождения цифры, ответ на вопрос «эта ли программа её посчитала». Второе: полученный результат сверяют с эталоном из договора или задания — это проверка правильности. Ловушка в том, что при ошибке в коде первое сравнение как раз совпадёт: программа воспроизведёт собственную ошибку, и подтверждение происхождения примут за подтверждение верности.

Смотрят и типовые места: момент и знак округления, совпадение расчётов на клиенте и на сервере, скидки, налоги и возвраты. Сохраните входные данные и спорные документы: без них перезапуск ничего не докажет.

Актуализировано
Обсудить задачу

Нужна экспертиза или консультация?

Опишите ситуацию и цель обращения. Мы определим нужный вид исследования, подберём профильного эксперта и поможем подготовить вопросы и материалы.

  • Подберём специалиста
  • Поможем с вопросами
  • Оценим срок и стоимость
Оценить материалы или позвоните 8 (800) 333-24-09 Бесплатный звонок по России