Требования: часто используется для округления и не очень чувствительна к требованиям к точности.
Для округления двух десятичных знаков разработчик написал следующий код:
Код очень прост, разработчикиФактический результат составил 12.12, что противоречило ожидаемому результату округления 12.13。
Причина этого результата в том, что Math.Round по умолчанию не использует правило округления, а вместо этого использует раунды для получения чётного результата.
Округли до пяти, чтобы сделать пару
Так называемое округление от шести до пяти для получения пары означает, что после определения значимых цифр, если следующая значимая цифра меньше или равна 4, она округляется вниз; если она больше или равна 6 — округляется вверх на единицу. Когда следующая значимая цифра равна 5,
- Если число до 5 нечётное, округляем пять и продвигаемся на один
- Если 5 — перед чётным числом, пропустите 5 (0 чётно).
Статистически округление до чётного более точно, чем округление пять, потому что при множестве вычислений округление каждых пяти к одному может привести к большему числу.
Например:
1,15+1,25+1,35+1,45 = 5,2
Если значительные цифры — это один знак после запятой, результат получается по принципу округления
1,2 + 1,3 + 1,4 + 1,5 = 5,4
Результат, полученный округлением до пяти чётных чисел, равен
1,2 + 1,2 + 1,4 + 1,4 = 5,2
Это показывает, что правило округления даёт более точные результаты.
Math.Round
Так как же использовать Math.Round для достижения ожидаемого округления?
На самом деле, Math.Round в C# предоставляет множество методов перегрузки, включая два метода:
Оба метода предоставляют третий параметр, называемый mode, который является переменной перечисления MidpointRounding с двумя выбираемыми значениями
- AwayFromZero — округление
- ToEven — округление к равномерному округлению
Если нам нужен идеальный округлённый результат, можно использовать следующий код:
Средняя точка Округление перечисления, как показано ниже:
Ссылка:Вход по гиперссылке виден. |