MidpointRounding Enumeração

Definição

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
MidpointRounding
Atributos

Campos

Nome Valor Description
ToEven 0

A estratégia de arredondar para o número mais próximo. Quando um número está na metade entre outros dois, ele é arredondado em direção ao número par mais próximo. Os valores de ponto não médio não são afetados por essa escolha e são arredondados para o valor representável mais próximo. Também conhecido como arredondamento do banqueiro.

AwayFromZero 1

A estratégia de arredondar para o número mais próximo. Quando um número está a meio caminho entre outros dois, ele é arredondado em direção ao número mais próximo que está longe de zero. Os valores de ponto não médio não são afetados por essa escolha e são arredondados para o valor representável mais próximo.

ToZero 2

A estratégia de arredondamento direcionado em direção a zero, em que cada valor, não apenas pontos médios, é arredondado para zero. O resultado é o valor mais próximo e não maior em magnitude do que o resultado infinitamente preciso. Ao arredondar para zero dígitos, isso é equivalente ao truncamento; ao arredondar para um número diferente de zero de dígitos, ele trunca em direção a zero na precisão especificada.

ToNegativeInfinity 3

A estratégia de arredondamento direcionado para baixo, em que cada valor , não apenas pontos médios, é arredondado em direção ao infinito negativo. O resultado é o valor mais próximo e não maior que o resultado infinitamente preciso. Ao arredondar para zero dígitos, isso é equivalente à função de piso matemático; ao arredondar para um número diferente de zero de dígitos, ele aplica o mesmo comportamento na precisão especificada.

ToPositiveInfinity 4

A estratégia de arredondamento direcionado para cima, em que cada valor , não apenas os pontos médios, é arredondado em direção ao infinito positivo. O resultado é o valor mais próximo e nada menos que o resultado infinitamente preciso. Ao arredondar para zero dígitos, isso é equivalente à função de teto matemática; ao arredondar para um número diferente de zero de dígitos, ele aplica o mesmo comportamento na precisão especificada.

Exemplos

O exemplo a seguir 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)
'

Comentários

Use a enumeração MidpointRounding com sobrecargas apropriadas de Math.Round, MathF.Round e Decimal.Round para fornecer mais controle do processo de arredondamento.

Apesar do nome da enumeração, nem todos os modos são apenas sobre como os pontos médios são tratados. MidpointRounding define duas estratégias gerais de arredondamento — arredondar para o arredondamento mais próximo e direcionado — e cada campo de enumeração participa exatamente de uma destas estratégias:

  • Os modos arredondados para mais próximos (AwayFromZero e ToEven) sempre arredondam para o valor representável mais próximo. Elas só diferem umas das outras quando a entrada está exatamente na metade entre dois valores (um ponto médio), que é a que o nome da enumeração se refere.
  • Os modos de arredondamento direcionados (ToNegativeInfinitye ToPositiveInfinityToZero) sempre arredondam todos os valores, não apenas pontos médios, em uma direção fixa. O resultado é o valor representável mais próximo nessa direção, mesmo quando a entrada não é um ponto médio.

Arredondar para o valor mais próximo

Campos:

Uma operação arredondada para mais próxima usa um número original com uma precisão implícita ou especificada; examina o próximo dígito, que está nessa precisão mais um; e retorna o número mais próximo com a mesma precisão que o 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á para o infinito negativo. Se o próximo dígito for de 6 a 9, o número mais próximo será para o infinito positivo. Para números negativos, se o próximo dígito for de 0 a 4, o número mais próximo será para o infinito positivo. Se o próximo dígito for de 6 a 9, o número mais próximo será para o infinito negativo.

Se o próximo dígito for de 0 a 4 ou 6 a 9, a opção entre AwayFromZero e ToEven não afetará o resultado da operação de arredondamento. No entanto, se o próximo dígito 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 será 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 para longe do zero ou o número par mais próximo.

A tabela a seguir demonstra os resultados do arredondamento de alguns números negativos e positivos em conjunto com modos de arredondamento para o mais próximo. A precisão usada para arredondar os números é zero, o que significa que o número após o ponto decimal afeta a operação de arredondamento. Por exemplo, para o número -2.5, o dígito após o ponto 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 será retornado porque ele é o número mais próximo de zero com uma precisão de zero. Se ToEven for especificado, -2 será 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

Campos:

Uma operação de arredondamento direcionado usa um número original com uma precisão implícita ou especificada e retorna o próximo número mais próximo em uma direção específica com a mesma precisão que o número original. Modos direcionados no MidpointRounding controle da direção para a qual cada valor é arredondado. Ao contrário dos modos de ida e volta para o mais próximo, esses modos se aplicam a cada valor de entrada, não apenas a pontos médios; por exemplo, ToPositiveInfinity arredonda 2.1, 2.5 e 2.8 até 3.

A tabela a seguir demonstra os resultados do arredondamento de alguns números negativos e positivos em conjunto com os modos de arredondamento direcionado. A precisão usada para arredondar os números é zero, o que significa que o número antes do ponto 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

Aplica-se a