У меня есть это "научное приложение", в котором значение Single должно быть округлено перед представлением его в пользовательском интерфейсе. Согласно этой статье MSDN, из-за "потери точности" метод Math.Round(Double, Int32) иногда будет "неожиданно", например. округление от 2.135 до 2.13, а не 2.14.
Как я понимаю, эта проблема не связана с "округлением банкира" (см., например, этот вопрос).
В приложении кто-то, по-видимому, решил решить эту проблему, явно переведя Single в Decimal перед округлением (т.е. Math.Round((Decimal)mySingle, 2)), чтобы вместо этого перегрузить Math.Round(Decimal, Int32). Помимо возникающих проблем с двоичным преобразованием, это "решение" также может вызвать выброс OverflowException, если значение Single слишком мало или велико для соответствия типу Decimal.
Улавливая такие ошибки, чтобы вернуть результат из Math.Round(Double, Int32), если преобразование завершится неудачно, это не делает меня идеальным решением. Также не перезаписывает приложение для использования Decimal полностью.
Есть ли более или менее "правильный" способ справиться с этой ситуацией, и если да, что это может быть?