Comments 8
Math.Round поддерживает два режима округления:
При округлении 0.5 к 1 получается не 5 на 5 (5 вверх и 5 вниз), а 4 на 5, потому что 0 к 0 не округляется. Но чем больше знаков после запятой будем добавлять к исходным числам, тем более точным будет округление "0.5 к 1".
Там тех округлений на самом деле довольно немало и дествительно проблем с ними не оберёшься. Поэтому в своё время для избегания ошибок погрешности сложения/перемножения вообще приводили к некоторым условным перецентиль центам и округляли копейки в сторону клиента при рассчёте уже после применения всех операций: штуки * цену * мультипликаторы - налоги - комиссии/акцизы/пр. Тоже долго и больно шли к этому.
Было бы здорово указать версию Excel для "На сладкое", т.к. в 2016 повторить не получилось
Предполагаю, что это не версия виновата, а настройка точности расчетов в Экселе, полная или как на экране. Результат и будет разным.
Да, проверил в своей 2016, дописал немного статью. Нашёл список версий, в которых повторяется. В списке 2010, 2013 и, приготовьтесь, 365(!).
Заодно нашёл пример, который прекрасно повторяется, 1*0 != 0
Малоизвестные детали реализации Math.Round() в .Net