MidpointRounding Enumeração
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Especifica a estratégia que os métodos de arredondamento matemático devem usar para arredondar um número.
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
- Herança
- Atributos
Campos
| Name | Valor | Descrição |
|---|---|---|
| ToEven | 0 | A estratégia de arredondar para o número mais próximo, e quando um número está a meio caminho entre dois outros, é arredondado para o número par mais próximo. |
| AwayFromZero | 1 | A estratégia de arredondar para o número mais próximo, e quando um número está a meio caminho entre dois outros, é arredondado para o número mais próximo que está longe de zero. |
| ToZero | 2 | A estratégia do arredondamento dirigido para zero, com o resultado mais próximo e não maior em magnitude do que o resultado infinitamente preciso. |
| ToNegativeInfinity | 3 | A estratégia do arredondamento dirigido para baixo, com o resultado mais próximo e não maior do que o resultado infinitamente preciso. |
| ToPositiveInfinity | 4 | A estratégia do arredondamento dirigido para cima, com o resultado mais próximo e não inferior ao resultado infinitamente preciso. |
Exemplos
O exemplo seguinte demonstra o Math.Round método em conjunto com a MidpointRounding enumeração:
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)
'
Observações
Utilize a MidpointRounding enumeração com sobrecargas apropriadas de Math.Round, MathF.Round e Decimal.Round para fornecer mais controle do processo de arredondamento.
Existem duas estratégias gerais de arredondamento — arredondamento para mais próximo e arredondamento direcionado — e cada campo de enumeração participa exatamente de uma dessas estratégias.
Arredondar ao valor mais próximo
Fields:
Uma operação de arredondamento para mais próximo utiliza um número original com uma precisão implícita ou especificada; examina o dígito seguinte, que está nessa precisão mais um; e devolve o número mais próximo com a mesma precisão do número original. Para números positivos, se o próximo dígito for de 0 a 4, o número mais próximo será em direção ao infinito negativo. Se o próximo dígito for de 6 a 9, o número mais próximo é em direção ao infinito positivo. Para números negativos, se o próximo dígito for de 0 a 4, o número mais próximo será em direção ao infinito positivo. Se o próximo dígito for de 6 a 9, o número mais próximo será em direção ao infinito negativo.
Se o dígito seguinte for de 0 a 4 ou de 6 a 9, o MidpointRounding.AwayFromZero e MidpointRounding.ToEven não afetará o resultado da operação de arredondamento. No entanto, se o dígito seguinte for 5, que é o ponto médio entre dois resultados possíveis, e todos os dígitos restantes forem zero ou não houver dígitos restantes, o número mais próximo é ambíguo. Nesse caso, os modos de arredondamento para o mais próximo em MidpointRounding permitem especificar se a operação de arredondamento retorna o número mais próximo afastado de zero ou o número par mais próximo.
A tabela seguinte demonstra os resultados do arredondamento de alguns números negativos e positivos utilizando os modos de arredondamento para o mais próximo. A precisão utilizada para arredondar os números é zero, o que significa que o número após a vírgula decimal afeta a operação de arredondamento. Por exemplo, para o número -2,5, o dígito após a vírgula decimal é 5. Como esse dígito é o ponto médio, você pode usar um MidpointRounding valor para determinar o resultado do arredondamento. Se AwayFromZero for especificado, -3 é retornado porque é o número mais próximo de zero com uma precisão de zero. Se ToEven for especificado, -2 é retornado porque é o número par mais próximo com uma precisão de zero.
| Número original | 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 |
Arredondamento direcionado
Fields:
Uma operação de arredondamento dirigido pega um número original com uma precisão implícita ou especificada e retorna o número seguinte mais próximo numa direção específica com a mesma precisão do número original. Os modos direcionados no MidpointRounding controlam para qual número predefinido o arredondamento é realizado.
A tabela abaixo demonstra os resultados do arredondamento de alguns números negativos e positivos usando modos de arredondamento direcionado. A precisão utilizada para arredondar os números é zero, o que significa que o número antes da vírgula decimal é afetado pela operação de arredondamento.
| Número original | ToNegativeInfinity | 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 |