Различия в номерах Excel Vs C #

Может ли кто-нибудь пролить свет на то, почему я могу видеть очень маленькие (10 ^ -08) разницы чисел при использовании точно таких же чисел в Excel vs C # ??

У меня есть формула и используйте те же самые входы. В Excel я получаю одно число. В C # я получаю другое. Разница крошечная.

Я использую doubles в C # и занимаюсь делением. Я пробовал использовать десятичные знаки, которые не имели большого значения

EDIT: Это заставляет меня NUTS – я провел все утро на этом – Любые идеи?

Разница связана с различными правилами округления MidPoint в c # и excel.

Попробуйте Math.Round(someNumber,precision,MidpointRounding.AwayFromZero);

При таких малых величинах разности (10 ^ -08, вы заявляете), я подозреваю, что промежуточные вычисления вызывают проблему. Обратите внимание, что значения двойной точности – 64 бит, но регистры могут работать с точностью до 80 бит. Итак, если у вас есть последовательность кода, в которой компилятор будет хранить все ваши промежуточные вычисления в регистрах, вы получите лучшую точность, чем если бы одни и те же вычисления выполнялись в разных точках вашего кода, заставляя промежуточные результаты удерживаться в 64 бит.

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

Вам действительно нужно показать свой код: показать как (a) расчеты Excel (это формула рабочего листа, либо вы делаете программные присвоения значениям ячеек?) И (b) расчеты C #, которые вы делаете. Если вы это сделаете, тогда мы сможем помочь вам более точно. Но с информацией, которую вы дали до сих пор, мы можем только делать широкие догадки.

– Майк

Эта тема также привела меня в орехи) =).

Несколько лет назад я обнаружил, что функция листа Excel =ROUND() дает разные результаты, чем функция ROUND() VBA. Я также обнаружил, что VBA и MySQL версии 4.x (не помню точной версии, до 5.x) использовали один и тот же алгоритм для округления типов чисел с плавающей запятой. Казалось, что они используют ошибочную версию «округления банкира». MySQL в конечном итоге изменил свое округление в будущих версиях, но кто-то отметил, что сходство между тем, как VBA и MySQL 4.x реализовали ROUND вероятно, объясняется тем, что оба они полагаются на то, как язык программирования C (вероятно, используется для создания VBA и MySQL) реализованы Round.

Оба VBA и MySQL 4.x просто реализовали то, что C используется для реализации округления. Однако многие современные языки программирования решили использовать свои методы округления по разным причинам; когда-то это будет соответствовать спецификации IEEE, и когда-нибудь это будет соответствовать тому, что, по их мнению, ожидает пользователь. В случае с VBA и MySQL 4.x некорректная версия округления банкира никогда не ожидалась от пользователя (отсюда ваше разочарование), поэтому в будущих языках были реализованы новые версии округления или предоставлены альтернативы (например, decimal тип на C #), поэтому что пользователь сможет производить ожидаемые значения и иметь больший контроль над всем процессом.

Вы можете попытаться взглянуть на эту статью для дальнейшего разъяснения по этому вопросу в отношении округления VBA: http://www.vb-helper.com/howto_round_to_specified_digits.html

Вы уверены, что видите весь номер в Excel?

Номера, отформатированные как «Общие», будут отображаться с точностью до 12 цифр (или меньше, если столбец недостаточно широк для ~ 12 цифр). Например, если вы поместите формулу «= PI ()» в ячейку с «общим» форматом (по умолчанию в Excel) и сделайте столбец достаточно широким, вы увидите 3.141592654. Обратите внимание, что если столбец недостаточно широк, вы увидите еще меньше цифр точности.

Теперь отформатируйте эту ячейку с пользовательским номером формата «0.00000000000000000», и вы увидите 3.14159265358979000 (если столбец достаточно широк).

Обратите внимание, что Excel фактически сохраняет значение = PI () внутренне с более чем 15 цифрами точности. Вы можете увидеть это, введя «= (PI () – 3.14159265358979)» в ячейку – обязательно включите скобки в формулу.

Теперь, просто для удовольствия, введите «= PI () – 3.14159265358979» в ячейку, и вы увидите, что получите нуль. В некоторых случаях, таких как добавление или вычитание, где результат «почти равен нулю», Excel фактически преобразует результат в 0.0 (это может свести вас с ума, если вы не знаете, что это происходит).

  • Excel 2016 запускает отмену ошибок при сохранении?
  • Требуется ли установить MS Excel или Office на сервере для чтения файла excel в веб-приложении?
  • Как я могу прочитать файл даже при получении исключения «в использовании другим процессом»?
  • Отображение и чтение файла Excel в datagridview
  • Как создать Excel с функцией Autofilter от ObservableCollection в C #
  • c # Excel 2007 Addin - установить на другой компьютер
  • Как получить текст из combobox или выпадающего списка в Excel Addin?
  • Вставка новых строк и перемещение существующих с помощью OpenXML SDK 2.0
  • Как включить чтение только для определенных ячеек и листов в excel с помощью openxml в c #
  • Экспорт таблицы данных в Excel
  • C # listbox & excel как удалить информацию в excel?
  • Interesting Posts

    Найти и заменить в VBA

    Примените форматирование к ячейке, если ее значения не совпадают с значениями другой ячейки (или группы ячеек)

    Excel – стоп-расчет при открытии для предотвращения циклической ссылки

    Как убедиться, что числа с десятичными знаками содержат ровно два десятичных знака в VBA?

    Необходимо скопировать определенные данные по рабочим книгам

    Получение экземпляров Office.customeXML без пространств имен

    Как включить сшиватель при печати?

    Переопределение встроенной функции excel с макросом или добавление

    Как добавить 2 раза в VBA?

    vba для добавления формы в определенную ячейку в Excel

    Скрыть отображение: столбец с экрана: таблица struts и экспорт в Excel

    Можно ли записать в существующий файл Excel, когда он ** открыт ** на рабочем столе?

    Функция Excel для определения оптимальной цены

    Результат нечетной математики Excel VBA

    Чтение и запись в одном файле excel с рубином

    Давайте будем гением компьютера.