Google Таблицы - вычитание дает неожиданные результаты

у меня есть следующий лист:

spreadsheet cells

почему разница двух ячеек с одинаковым значением (J7 & J8) не равна нулю?

вот пример таблицы.

2 ответов


переключение на формат / номер / научный на этой ячейке вы можете увидеть оставшееся значение:

scientific format

эти ошибки округления явно обычная вещь. Вы можете использовать такую формулу, как =E3-round(E3,2) чтобы увидеть их в любой ячейке:

rounding remainders

ясно, что с учетом небольшого значения в условном форматировании можно избежать проблемы:

conditional formatting formula


чтобы добавить к ответу @df778899, это не просто "обычная вещь". Это неизбежное следствие арифметики с плавающей запятой.

удивительно то, что Google, по-видимому, представляет числа внутри в формате с плавающей запятой. Для тех же чисел Excel дает правильный результат в сравнении равенства, что предполагает, что в отличие от Google, представление Excel является фиксированной точкой.

  • EDIT: при двойной проверке можно найти примеры ошибки с плавающей запятой в Excel тоже, поэтому этот абзац неверен.

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

на практике, при сравнении фракционирования с другими фракционирования, избегайте использования

=if(j7=j8, ...)

или EQ(). Вместо этого используйте

=if(abs(J7-J8)<0.0001, ...)

(С соответствующей произвольной точность)