Pull to refresh

Вычисление/сравнение float и налоговая

Level of difficultyEasy
Reading time1 min
Views1.8K

Начну без прелюдий - когда сравниваются числа float (в любой системе или языке) в общем случае это делается с учетом погрешности вычислений. Вот нас в 90-е года в Университетах учили делать так:

if(abs($summ - $summ2) < 0.1){
// Суммы равны в учетом погрешности
}

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

SELECT  ROUND(SUM(summ), 2) as summ1,
        SUM(ROUND(summ, 2)) as summ2
FROM  ...

Особенно критично проблема проявляется в больших системах учета - нужно быть архи-внимательными с подобными расчетами. На больших цифрах и немалом количестве операций такие неточности достаточно сложно отлавливаются. Кроме того, в разных системах/языках принципы расчета float чисел может быть разным. Конечно, программисты с опытом знают о подобных вещах, но новички могут посчитать сумму на примере двух строк и думать, что "дело в шляпе". И будет хорошо, если проблема найдется раньше чем упадет ракета, взорвется АЭС или у кого-то по этой причине будут проблемы с надзорными органами..

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

Ну, а теперь к главному - причем здесь налоговая, спросите вы? Вот два свежих скрина:

Может быть, конечно, я ошибаюсь в причинах произошедшего.. И, надеюсь, 1 апреля - это просто так случайно совпало :-)

Tags:
Hubs:
Total votes 3: ↑1 and ↓2-1
Comments11

Articles