Google Таблицы - вычитание дает неожиданные результаты
у меня есть следующий лист:
почему разница двух ячеек с одинаковым значением (J7
& J8
) не равна нулю?
2 ответов
переключение на формат / номер / научный на этой ячейке вы можете увидеть оставшееся значение:
эти ошибки округления явно обычная вещь. Вы можете использовать такую формулу, как =E3-round(E3,2)
чтобы увидеть их в любой ячейке:
ясно, что с учетом небольшого значения в условном форматировании можно избежать проблемы:
чтобы добавить к ответу @df778899, это не просто "обычная вещь". Это неизбежное следствие арифметики с плавающей запятой.
удивительно то, что Google, по-видимому, представляет числа внутри в формате с плавающей запятой. Для тех же чисел Excel дает правильный результат в сравнении равенства, что предполагает, что в отличие от Google, представление Excel является фиксированной точкой.
- EDIT: при двойной проверке можно найти примеры ошибки с плавающей запятой в Excel тоже, поэтому этот абзац неверен.
студентов в области информатики учат всегда использовать аппроксимированное, а не точное сравнение для чисел FP. Я думаю, что неразумно ожидать этого от пользователей электронных таблиц.
на практике, при сравнении фракционирования с другими фракционирования, избегайте использования
=if(j7=j8, ...)
или EQ(). Вместо этого используйте
=if(abs(J7-J8)<0.0001, ...)
(С соответствующей произвольной точность)