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 для обеспечения большего контроля над процессом округления.
Существует две общие стратегии округления — округление до ближайшего и направленного округления, и каждое поле перечисления участвует в одной из этих стратегий.
Округление до ближайшего
Fields:
Операция округления до ближайшего принимает исходное число с неявной или указанной точностью; проверяет следующую цифру, которая соответствует указанной точности плюс один знак; и возвращает ближайшее число с исходной точностью. Для положительных чисел, если следующая цифра составляет от 0 до 4, ближайшее число приближается к отрицательной бесконечности. Если следующая цифра составляет от 6 до 9, ближайшее число приближается к положительной бесконечности. Для отрицательных чисел, если следующая цифра составляет от 0 до 4, ближайшее число приближается к положительной бесконечности. Если следующая цифра составляет от 6 до 9, ближайшее число приближается к отрицательной бесконечности.
Если следующая цифра составляет от 0 до 4 или 6–9, это MidpointRounding.AwayFromZeroMidpointRounding.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 | 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 |