Tablora

Tablora · Библиотека

Сохранить видимыми малые десятичные слагаемые

Сложите 1.2 и 0.003 точно и получите 1.203. Проверка сохраняет наибольшее число знаков после точки, поэтому малые слагаемые никогда не теряются при округлении.

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

Реальные данные смешивают точность: цена за единицу с тремя или четырьмя знаками после точки, комиссия, округлённая до центов, количество в целых числах. Если складывать их в инструменте, который форматирует результат до двух знаков, малое слагаемое вроде 0.003 может исчезнуть из показанного итога, а два итога, различающиеся в третьем знаке, будут выглядеть одинаково.

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

Точность учитывает и «Ожидаемая сумма». Если ввести там 1.20300, каждое число в результате будет показано с пятью знаками после точки, хотя ни в одной строке столько нет.

Складываем 1.2 и 0.003

В примере на странице в поле «По одному значению в строке» введены 1.2 и 0.003, а ожидаемая сумма — 1.203. «Вычисленная сумма» равна 1.203, «Разница» — 0.000, поэтому «Суммы совпадают» показывает «Да». В результате три знака после точки, потому что их по три и у 0.003, и у ожидаемой суммы.

Обратите внимание: разница показана как 0.000, а не 0. Все числа в результате имеют одинаковую точность, и поэтому небольшие расхождения легко заметить.

Как вводить значения разной точности

Округление — отдельный шаг

Сохранение точности — свойство точной арифметики, а не финансовое правило округления. Если число, с которым вы сверяетесь, было округлено до центов, сначала выясните, округлял ли источник каждую строку или только итог, и сами примените это правило перед сравнением. Тогда проверка покажет, совпадает ли округлённое число.

Нормализатор чисел ведёт себя так же с отдельными значениями: он сохраняет записанные цифры дробной части, так что 125.00 остаётся 125.00, а 0.003 остаётся 0.003 и не сокращается.

Входные данные

По одному значению в строке
1.2 0.003
Ожидаемая сумма
1.203

Результаты

Вычисленная сумма
1.203
Разница
0.000
Суммы совпадают
Да