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
- Наследование
- Атрибуты
Поля
| Имя | Значение | Описание |
|---|---|---|
| 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 |