Функция раунда в Excel, функция рабочего листа против VBA

У меня было приложение для возврата ближайших совпадений с определенными значениями в большом кластере значений (как в моем предыдущем вопрос), и я выбрал решение VBA. Во время использования указанного приложения я заметил, что результаты для значения 0,5 были неверными. Я использовал функцию VBA Round, которая, как я обнаружил, возвращает 0 для 0,5 с округлением до целого числа, тогда как функция round на листе возвращает 1. Как ни странно, функция round в VBA возвращает 2 для 1,5. Мне пришлось заменить функцию рабочего листа на VBA.

Я что-то упускаю?

Имейте в виду, что функция VBA не «неправильная»; как указывает Лэнс в связанном вопросе о доступе, это просто другой метод округления. Примером неправильного округления может быть ColdFusion 6.1, который, я думаю, округлял 0,5 в большую сторону, за исключением очень конкретных случаев.

Dave DuPlantis 05.11.2008 23:33
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
1
9 931
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это известная проблема. Функция VBA Round () использует округление Банковского, в то время как функция ячейки электронной таблицы использует арифметическое округление. Подробности здесь:

PRB: функция округления отличается в VBA 6 и электронной таблице Excel

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

Банковское округление всегда округляет 0,5 до ближайшего числа выравнивать и является стандартным в бухгалтерском учете, поэтому Excel работает именно так. Арифметическое округление округляет 0,5 до следующего числа.

Ваш последний абзац перевернут: Excel не использует округление Банкира, поэтому утверждение, что «вот почему Excel работает именно так», не имеет смысла. Во всяком случае, это только усугубляет загадку того, почему Excel сломался от округления Банкира.

John Coleman 21.04.2016 00:13

@JohnColeman, последний абзац был добавлен Джоэлем Спольски (который был менеджером программы команды Excel в 90-х), поэтому я пытаюсь интерпретировать его: «Поскольку округление банкиров применимо только в бухгалтерском учете, Excel предпочел арифметическое округление, которое имеет более широкий применимость ». Надеюсь, что не станет хуже ...

Panos 22.04.2016 11:45

Интересно. Поскольку он также является соучредителем Stack Overflow и автором одного из лучших блогов о программировании всех времен, я вижу, что вы колебались при его редактировании, хотя подозреваю, что он просто оговорился.

John Coleman 22.04.2016 13:19

Другие вопросы по теме