MidpointRounding Перечисление

Определение

Указывает стратегию, которую математические методы округления должны использовать для округления числа.

public enum class MidpointRounding
public enum MidpointRounding
[System.Runtime.InteropServices.ComVisible(true)]
public enum MidpointRounding
type MidpointRounding = 
[<System.Runtime.InteropServices.ComVisible(true)>]
type MidpointRounding = 
Public Enum MidpointRounding
Наследование
MidpointRounding
Атрибуты

Поля

Имя Значение Описание
ToEven 0

Стратегия округления до ближайшего числа. Когда число находится на полпути между двумя другими, он округляется в сторону ближайшего четного числа. Значения, не относящиеся к середине, не влияют на этот выбор и округляются до ближайшего представляющего значения. Также известен как округление банкира.

AwayFromZero 1

Стратегия округления до ближайшего числа. Когда число находится на полпути между двумя другими, он округляется в сторону ближайшего числа, которое от нуля. Значения, не относящиеся к середине, не влияют на этот выбор и округляются до ближайшего представляющего значения.

ToZero 2

Стратегия направленного округления к нулю, где каждое значение ( а не только середина) округляется к нулю. Результатом является ближайшее к значению и не больше величины, чем бесконечно точный результат. При округлениях до нуля цифр это эквивалентно усечению; При округление до ненулевого числа цифр он усечен в сторону нуля при указанной точности.

ToNegativeInfinity 3

Стратегия округления, направленная вниз, где каждое значение , а не только середина, округляется в сторону отрицательной бесконечности. Результатом является ближайшее к и не большее, чем бесконечно точный результат. При округление до нуля цифр это эквивалентно функции математического пола; при округление до ненулевого числа цифр применяется то же поведение с указанной точностью.

ToPositiveInfinity 4

Стратегия округления вверх, где каждое значение , а не только середина, округляется к положительной бесконечности. Результатом является ближайшее к и не меньшее, чем бесконечно точный результат. При округление до нуля цифр это эквивалентно математической функции потолка; При округление до ненулевого числа цифр применяется то же поведение с указанной точностью.

Примеры

В следующем примере демонстрируется Math.Round метод в сочетании с MidpointRounding перечислением:

decimal result;

// Round a positive value using different strategies.
// The precision of the result is 1 decimal place.

result = Math.Round(3.45m, 1, MidpointRounding.ToEven);
Console.WriteLine($"{result} = Math.Round({3.45m}, 1, MidpointRounding.ToEven)");
result = Math.Round(3.45m, 1, MidpointRounding.AwayFromZero);
Console.WriteLine($"{result} = Math.Round({3.45m}, 1, MidpointRounding.AwayFromZero)");
result = Math.Round(3.47m, 1, MidpointRounding.ToZero);
Console.WriteLine($"{result} = Math.Round({3.47m}, 1, MidpointRounding.ToZero)\n");

// Round a negative value using different strategies.
// The precision of the result is 1 decimal place.

result = Math.Round(-3.45m, 1, MidpointRounding.ToEven);
Console.WriteLine($"{result} = Math.Round({-3.45m}, 1, MidpointRounding.ToEven)");
result = Math.Round(-3.45m, 1, MidpointRounding.AwayFromZero);
Console.WriteLine($"{result} = Math.Round({-3.45m}, 1, MidpointRounding.AwayFromZero)");
result = Math.Round(-3.47m, 1, MidpointRounding.ToZero);
Console.WriteLine($"{result} = Math.Round({-3.47m}, 1, MidpointRounding.ToZero)\n");

/*
This code example produces the following results:

3.4 = Math.Round(3.45, 1, MidpointRounding.ToEven)
3.5 = Math.Round(3.45, 1, MidpointRounding.AwayFromZero)
3.4 = Math.Round(3.47, 1, MidpointRounding.ToZero)

-3.4 = Math.Round(-3.45, 1, MidpointRounding.ToEven)
-3.5 = Math.Round(-3.45, 1, MidpointRounding.AwayFromZero)
-3.4 = Math.Round(-3.47, 1, MidpointRounding.ToZero)
*/
Dim result As Decimal = 0D
Dim posValue As Decimal = 3.45D
Dim negValue As Decimal = -3.45D

' Round a positive value using different strategies.
' The precision of the result is 1 decimal place.
result = Math.Round(posValue, 1, MidpointRounding.ToEven)
Console.WriteLine("{0,4} = Math.Round({1,5}, 1, MidpointRounding.ToEven)",
                   result, posValue)
result = Math.Round(posValue, 1, MidpointRounding.AwayFromZero)
Console.WriteLine("{0,4} = Math.Round({1,5}, 1, MidpointRounding.AwayFromZero)",
                   result, posValue)
result = Math.Round(posValue, 1, MidpointRounding.ToZero)
Console.WriteLine("{0,4} = Math.Round({1,5}, 1, MidpointRounding.ToZero)",
                   result, posValue)
Console.WriteLine()

' Round a negative value using different strategies.
' The precision of the result is 1 decimal place.
result = Math.Round(negValue, 1, MidpointRounding.ToEven)
Console.WriteLine("{0,4} = Math.Round({1,5}, 1, MidpointRounding.ToEven)",
                    result, negValue)
result = Math.Round(negValue, 1, MidpointRounding.AwayFromZero)
Console.WriteLine("{0,4} = Math.Round({1,5}, 1, MidpointRounding.AwayFromZero)",
                   result, negValue)
result = Math.Round(negValue, 1, MidpointRounding.ToZero)
Console.WriteLine("{0,4} = Math.Round({1,5}, 1, MidpointRounding.ToZero)",
                   result, negValue)
Console.WriteLine()

'This code example produces the following results:
'
'        3.4 = Math.Round(3.45, 1, MidpointRounding.ToEven)
'        3.5 = Math.Round(3.45, 1, MidpointRounding.AwayFromZero)
'        3.4 = Math.Round(3.45, 1, MidpointRounding.ToZero)
'
'        -3.4 = Math.Round(-3.45, 1, MidpointRounding.ToEven)
'        -3.5 = Math.Round(-3.45, 1, MidpointRounding.AwayFromZero)
'        -3.4 = Math.Round(-3.45, 1, MidpointRounding.ToZero)
'

Комментарии

Используйте перечисление MidpointRounding с соответствующими перегрузками Math.Round, MathF.Round и Decimal.Round для обеспечения большего контроля над процессом округления.

Несмотря на имя перечисления, не каждый режим заключается только в том, как обрабатываются средние точки. MidpointRounding определяет две общие стратегии округления — округление до ближайшего и направленного округления, и каждое поле перечисления участвует в одной из следующих стратегий:

  • Круговые и ближайшие режимы (AwayFromZero и ToEven) всегда округляется до ближайшего представляющего значения. Они отличаются только друг от друга, если входные данные примерно на полпути между двумя значениями ( серединой), что означает имя перечисления.
  • Режимы направленного округления (, ToNegativeInfinityиToPositiveInfinity) всегда округляют каждое значение (ToZero а не только в середине) в фиксированном направлении. Результатом является ближайшее представляющее значение в этом направлении, даже если входные данные не являются серединой.

Округление до ближайшего

Fields:

Операция округления до ближайшего принимает исходное число с неявной или указанной точностью; проверяет следующую цифру, которая соответствует указанной точности плюс один знак; и возвращает ближайшее число с исходной точностью. Для положительных чисел, если следующая цифра составляет от 0 до 4, ближайшее число приближается к отрицательной бесконечности. Если следующая цифра составляет от 6 до 9, ближайшее число приближается к положительной бесконечности. Для отрицательных чисел, если следующая цифра составляет от 0 до 4, ближайшее число приближается к положительной бесконечности. Если следующая цифра составляет от 6 до 9, ближайшее число приближается к отрицательной бесконечности.

Если следующая цифра составляет от 0 до 4 или 6 до 9, выбор между AwayFromZero и ToEven не влияет на результат операции округления. Однако если следующая цифра равна 5, то это середина между двумя возможными результатами, и все оставшиеся цифры равны нулю или нет оставшихся цифр, ближайшее число неоднозначно. В этом случае режимы округления в MidpointRounding позволяют указать, возвращается ли при округлении ближайшее число от нуля или ближайшее четное число.

В следующей таблице показаны результаты округления некоторых отрицательных и положительных чисел в соответствии с режимами округления до ближайшего. Точность, используемая для округления чисел, равна нулю, что означает, что число после десятичной запятой влияет на операцию округления. Например, для числа -2,5 цифра после десятичной запятой составляет 5. Так как эта цифра является серединой, можно использовать значение MidpointRounding для определения результата округления. Если AwayFromZero задано, -3 возвращается, так как это ближайшее число от нуля с точностью от нуля. Если ToEven задано, возвращается -2, так как он является ближайшим четным числом с точностью от нуля.

Исходный номер AwayFromZero ToEven
3.5 4 4
2.8 3 3
2.5 3 2
2.1 2 2
-2.1 -2 -2
-2.5 –3 -2
-2.8 –3 –3
-3.5 -4 -4

Направленное округление

Fields:

Операция направленного округления принимает исходное число с неявной или указанной точностью и возвращает следующее ближайшее число в определенном направлении с той же точностью, что и исходное число. Направленные режимы для MidpointRounding управления направлением, к которому округляется каждое значение. В отличие от режимов округления к ближайшей, эти режимы применяются ко всем входным значениям, а не только к середине; например, ToPositiveInfinity округляет 2.1, 2.5 и 2.8 до 3.

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

Исходный номер К отрицательной бесконечности ToPositiveInfinity ToZero
3.5 3 4 3
2.8 2 3 2
2.5 2 3 2
2.1 2 3 2
-2.1 –3 -2 -2
-2.5 –3 -2 -2
-2.8 –3 -2 -2
-3.5 -4 –3 –3

Применяется к