Не могли бы вы помочь - у меня странная ситуация, когда я ввожу в ячейку число 22222.09482, тогда в строке формул я вижу другое число 22222.0948199999. Ниже приведен снимок проблемы.
Я вижу то же самое поведение, когда я ввожу следующие числа:
22222.09482
33333.09482
44444.09482
55555.09482
но когда я ввожу 11111.09482 и 66666.09482, 77777.09482 .. до 99999.09482, тогда они отображаются правильно. Я не уверен, что это связано с округлением? Я не настроил никаких профилей округления. Не могли бы вы помочь мне в решении проблемы.
microsoft-excel
microsoft-excel-2016
user954171
источник
источник
ROUND()
?=ROUND(A1,5)
, а затем скопировать / вставить данные как значения и удалить исходные числа?ROUND()
показывает правильные цифры, но копирование / вставка в качестве значения возвращает его к исходной проблеме!ROUND(A1,5)
раз на вставленные значения. Затем скопируйте / вставьте их как значения иRound()
снова, затем скопируйте / вставьте. ...: P ... это интересно, и, похоже, у @EugenRieck есть причины. Хороший вопрос!double
имеет достаточную точность, чтобы при округлении отображать правильные значения, как и ожидало большинство людейОтветы:
Это ошибка.
В соответствии с другими ответами Excel использует обычное представление двойной точности IEEE. Его точность составляет 53 значащих двоичных разряда, что соответствует примерно 16 десятичным разрядам.
Всегда безопасно отображать первые 15 значащих десятичных цифр. В том смысле, что любое десятичное «представленное» число, заданное 15 цифрами, можно безопасно отличить от чисел, полученных путем изменения 15-го десятичного знака на единицу. Например, 15-значные числа:
сопоставить с тремя различными числами двойной точности. Ни один из этих трех не будет «соседями» в представлении двойной точности, в данном конкретном случае.
Таким образом, путаница первых двух на пользовательском дисплее является ошибкой Excel.
Фактически, в этой области (между 16384 и 32768) абсолютная точность составляет 2 -38 , и представляются следующие числа:
Чтобы уточнить дальше, попробуйте набрать
22222.09482
в одной ячейке и набрать22222.0948199999
(пять конечных девяток) в другой ячейке. Excel должен выбрать двух представителей IEEE, указанных стрелкой выше. И я думаю, что это так, потому что вы можете рассчитать разницу этих двух ячеек, чтобы получить9.82254E-11
. Но оба показаны одинаково.Если бы Excel показал первые 17 цифр, было бы полезно точно определить, какой номер IEEE находится «под» десятичным числом. В таком случае:
Но показ 15 цифр, округленных неправильно, вводит в заблуждение и бесполезен.
Прежде чем кто-либо заявляет, что это намеренно, то почему
8.7
не проявляется такое же поведение? Ближайшее число двойной точности к8.7
:таким образом, это должно показать, как
8.69999999999999
будто это было преднамеренно. Но это не так.источник
2.1 + 2.2
возвращается4.80000001
?" и получить много ответов о том, что это то, что я должен ожидать, когда я использую с плавающей запятой.Excel хранит числа в двоичном 64-битном формате IEEE 754 с плавающей запятой. Ключ «хранит» - изменение с десятичного на двоичное происходит при каждом сохранении числа, а не только при его использовании в реальных вычислениях.
Хорошая статья на эту тему - « Понимание точности с плавающей запятой», или «Почему Excel дает мне, казалось бы, неправильные ответы?»
Можно создать программу для работы с электронными таблицами, которая будет обрабатывать действительно большие числа с большим количеством значащих цифр. Но это не очень практично. В Excel можно было бы использовать формат IEEE 754 decimal128 , который допускает 34 десятичных знака - более чем достаточно для хранения 22222.09482. Но вместо этого он использует гораздо более распространенный двоичный формат Double Precision64 , который имеет точность 53 бита, что составляет чуть менее 16 цифр. Хотя вы можете подумать, что этого будет достаточно для числа, содержащего только 10 цифр, преобразование из десятичного в двоичное несколько усложняет ситуацию, т. Е. 2222209482 может храниться на 100% правильно как двоичное число 64, а 22222.09482 - нет.
Имейте в виду, что электронные таблицы обычно используются для финансовых данных, которые обычно не требуют большого количества цифр точности, или для моделирования «что если» в различных сценариях, где не требуется сверхвысокий уровень точности. Конечно, есть и другие инструменты (и, возможно, другие программы для работы с электронными таблицами, но я в последнее время не искал), которые по умолчанию или с помощью специальных настроек конфигурации могут использовать больший числовой формат, но Excel не является одним из них.
Для тех, кто отмечает, что LibreOffice справляется с этим лучше, внешность может быть обманчива. Смотрите этот пост для более подробной информации. Кажется, что LibreOffice обрабатывает большие числа немного по-разному, но имеет одинаковое базовое 64-битное представление с плавающей точкой с похожими проблемами.
источник
22222.09482
хранится как1.0101101100111000011000010001100001111110011111000000₂ * 2₁₀^(10000001101₂ - 1023₁₀)
в IEEE 754, или, другими словами, точно так1.35632902954101553 * 2^14
, как есть22222.0948199999984353787904
.0.2
и0.1
не может быть представлено точно (фракция 1/5 (одна пятая) имеет бесконечное повторяющееся двоичное расширение). Тем не менее, Excel показывает вещи в замешательстве.Money
илиBigInteger
формат, который часто использует десятичный формат хранения.При выполнении вычислений Excel должен найти хорошее внутреннее двоичное представление для используемых чисел. В вашем случае он использует число с плавающей запятой, и фактически этот формат данных имеет (очень хорошее) приближение для вашего числа, но не дает точного соответствия. Поэтому, если вы явно не укажете Excel, какой выходной формат использовать, он приложит «все усилия», что приведет к выводу, который ближе к внутренне вычисляемому значению, но не совсем к вводимому вами тексту.
Просто чтобы прояснить это: понимание того, что введенный вами текст представляет число, и преобразование последовательности цифр в число уже соответствует определению «вычисления», приведенному выше.
РЕДАКТИРОВАТЬ
Я не совсем ясно дал понять, что считаю выбор использования 64-битного представления с плавающей точкой действительно хорошим: Excel не является инструментом для ученых, где ошибка округления в 11-й цифре после десятичной запятой составляет большое влияние, но бухгалтеры не хотят, чтобы их скорость обработки, уменьшенная в миллионы раз, стала источником неточных вычислений, которые могут проявиться в числах, которые они никогда не используют.
Если вы используете программу для работы с электронными таблицами, для которой она была разработана, и используете явное форматирование вывода, чтобы эти эффекты никогда не попадали в видимую область, у вас все будет хорошо.
источник
Некоторые числа могут быть представлены правильно, а некоторые нет.
Установите отображаемую точность в соответствии с вашими расчетами и используйте функцию round () .
Объяснение:
Википедия - « Числовая точность в Microsoft Excel »
Руководство по числовым вычислениям Oracle - « Что должен знать каждый компьютерщик об арифметике с плавающей точкой »
Решение:
Журнал бухгалтерии - « Ошибка в расчетах Excel »:
источник
Как я уверен, вы знаете, что компьютеры внутренне работают только с нулями и единицами (иначе говоря, битами) и имеют фиксированное количество бит для представления значения (обычно 64 бита в настоящее время). Это означает, что число различных значений, которые могут быть представлены, составляет от 2 до 64 степени. Конечно, это огромное число, но число возможных значений конечно, поэтому не все числа могут быть представлены. Когда он встречает число, которое он не может представить точно, он автоматически заменяется ближайшим, который он может представить. Это то, что вы видите.
источник
Компьютеры выполняют свою математику в двоичном формате и почти всегда используют числа с плавающей запятой для нецелых значений. Единственные дробные значения, которые могут быть точно представлены в плавающей запятой, должны быть суммой некоторой комбинации дробных степеней 2 (1/2, 1/4, 1/8, 1/16, 1/32, ...), заканчивающихся с заданным пределом точности (обычно 53 бита). Эти значения не всегда имеют аккуратное или точное представление в десятичном формате, и, наоборот, не все дробные значения, которые вы можете представить точно в десятичном виде, будут иметь точное представление в двоичном виде. Например: 0,1. Это не может быть представлено как сумма дробных степеней 2, которая не продолжается вечно.
Когда вы вводите десятичное значение в вашу электронную таблицу, оно будет преобразовано и сохранено в двоичном формате, и такие случаи, как вы описали, станут самым близким приближением, которое может быть представлено в двоичном виде. Когда отображается, он преобразуется обратно в десятичную, опять же требуется приближение, которое может не преобразовать обратно в точно то же представление, которое вы ввели.
Почему 53 бита (дать или взять)? Потому что типичный стандарт для хранения «двойной точности» с плавающей запятой использует 64 бита, в которых есть мантисса (также называемая значением), индикатор знака и показатель степени. Экспоненту обычно выделяется 10 битов, знак занимает один, оставляя 53 для мантиссы. Это для хранения. Расчеты обычно выполняются с использованием 80 бит и округляются назад.
Существуют ситуации, когда компьютеры будут работать на базе 10, особенно при работе с денежными значениями, когда артефакты округления неприемлемы.
источник
Как уже говорили многие, это внутренняя ошибка представления. Excel сделал выбор для 64-битных чисел с плавающей запятой двойной точности. Это дает вам 2 64 возможных значения. Домен действительных чисел содержит бесконечность значений, поэтому, когда вы пытаетесь использовать тот, который не может быть представлен в Excel, он будет использовать наиболее близкие, которые могут быть представлены.
Я видел комментарии о том, что, учитывая бесконечную память, можно представить любое действительное число. Правда, но не существует такой вещи, как «бесконечная память», так что это спорный вопрос. Другие заявили, что Excel мог бы использовать большее внутреннее представление, например 128 бит. Правда, но оказывается, что компьютеры лучше выполняют математические операции над числами, представленными с количеством битов, которое соответствует размеру шины процессора. Таким образом, 32-разрядный компьютер будет быстрее всех в математических операциях с 32-разрядными числами, а 64-разрядный компьютер будет быстрее всех в математических операциях с 64-разрядными числами. Если и когда будет 128-битный компьютер, то мы можем ожидать, что Excel перейдет на 128-битное представление чисел. Это все еще обеспечит очень большой, но ограниченный набор чисел, которые могут быть представлены.
Если вас беспокоит то, как числа выглядят в электронной таблице, то использование заданной точности (числа десятичных знаков) даст вам согласованные результаты. Если вы беспокоитесь о разнице между введенным вами номером и фактическим номером, сохраненным в Excel, вы вправе быть обеспокоенным. Разница реальна, и ошибка будет отражена во всех ваших расчетах. Я боюсь, что вы застряли с этой ошибкой. Это ограничение Excel, а не ошибка, как утверждают некоторые. В ближайшее время он вряд ли изменится, поэтому, если он для вас неприемлем, я предлагаю вам найти другое приложение для работы с электронными таблицами, которое может представлять числа с более высокой точностью. Но имейте в виду, что если вы найдете какое-либо такое приложение, ограничение все еще существует. Это просто размер ошибки, который отличается.
источник