Excel sumif возвращает большое число вместо нуля - PullRequest
0 голосов
/ 20 декабря 2018

У меня есть столбец положительных и отрицательных чисел, который при суммировании должен сбалансироваться до нуля (это бухгалтерская ведомость).

Однако, если я использую формулу SUMIF вместо 0, я получу: 1.81899E-12 или -9.09495E-13 или аналогичный.(Я не знаю, как называется такой результат, но я думаю, что они представляют очень большие или очень маленькие цифры)

Я создал образец документа, в котором показана проблема.

Возвращает ноль, если ячейка отформатирована как число, но приведенный выше результат, если отформатирован как общий.

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

Я использую Excel как часть Home and Business 2013.

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 20 декабря 2018

Как отметил @Dominique, xxxE-12 - это очень, очень небольшое число.Это очень, очень близко к нулю.

xxxE-12 - это способ написания Excel (и большинства языков программирования) xxx * 10^-12.

Как вы уже догадались, это связано с округлением.Тем не менее, он также отображает проблемы того, как компьютеры обрабатывают числа с плавающей запятой (десятичные);то, что вы думаете, 1/3 = 0,333, может быть внутренне представлено как что-то вроде 0,333333681.См. https://en.wikipedia.org/wiki/Floating-point_arithmetic, или, в частности, https://en.wikipedia.org/wiki/Floating-point_arithmetic#Accuracy_problems.

Во-вторых, почему это происходит, если ячейка отформатирована как «Общая», а не «Число»?С «Number» вы ожидаете целую часть и, самое большее, скажем, 3 десятичных знака.x.xxE-12 имеет наибольший ненулевой компонент с 12-ым (!) Десятичным знаком.Таким образом, при отображении он округляется до хорошего нуля.«Общее», однако, пытается отобразить число как близкое к фактическому значению, которое в данном случае является xxxE-12.

Также обратите внимание, что это может вызвать проблемы, если вы попытаетесь сравнить рассчитанное значение с нулем,Скажите, =IF(SUMIF(...) = 0, ...;он может не иметь значения ИСТИНА, даже если вы думаете, что это так (из-за очень малого значения).Вместо этого решение состоит в том, чтобы сравнить разницу рассчитанного значения с нулем: =IF(ABS(SUMIF(...) - 0) < 1E-9, ....

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...