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





Это известная проблема. Функция VBA Round () использует округление Банковского, в то время как функция ячейки электронной таблицы использует арифметическое округление. Подробности здесь:
PRB: функция округления отличается в VBA 6 и электронной таблице Excel
Обходной путь, предложенный Microsoft, заключается в написании настраиваемой функции для получения желаемых результатов.
Банковское округление всегда округляет 0,5 до ближайшего числа выравнивать и является стандартным в бухгалтерском учете, поэтому Excel работает именно так. Арифметическое округление округляет 0,5 до следующего числа.
Ваш последний абзац перевернут: Excel не использует округление Банкира, поэтому утверждение, что «вот почему Excel работает именно так», не имеет смысла. Во всяком случае, это только усугубляет загадку того, почему Excel сломался от округления Банкира.
@JohnColeman, последний абзац был добавлен Джоэлем Спольски (который был менеджером программы команды Excel в 90-х), поэтому я пытаюсь интерпретировать его: «Поскольку округление банкиров применимо только в бухгалтерском учете, Excel предпочел арифметическое округление, которое имеет более широкий применимость ». Надеюсь, что не станет хуже ...
Интересно. Поскольку он также является соучредителем Stack Overflow и автором одного из лучших блогов о программировании всех времен, я вижу, что вы колебались при его редактировании, хотя подозреваю, что он просто оговорился.
Имейте в виду, что функция VBA не «неправильная»; как указывает Лэнс в связанном вопросе о доступе, это просто другой метод округления. Примером неправильного округления может быть ColdFusion 6.1, который, я думаю, округлял 0,5 в большую сторону, за исключением очень конкретных случаев.