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, e quando um número está na metade entre outros dois, é arredondado em direção ao 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á na metade entre outros dois, ele é arredondado em direção ao número mais próximo que está longe de zero.

ToZero 2

A estratégia de arredondamento direcionado em direção a zero, com o resultado mais próximo e nenhum maior em magnitude do que o resultado infinitamente preciso.

ToNegativeInfinity 3

A estratégia de arredondamento direcionado para baixo, com o resultado mais próximo e não maior que o resultado infinitamente preciso.

ToPositiveInfinity 4

A estratégia de arredondamento direcionado para cima, com o resultado mais próximo e nada menos que o resultado infinitamente preciso.

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.

Há duas estratégias gerais de arredondamento—arredondamento para o mais próximo e arredondamento direcionado—e cada campo de enumeração participa exatamente de uma dessas estratégias.

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 de 6 a 9, os MidpointRounding.AwayFromZero e MidpointRounding.ToEven não afetam 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 direcionam para qual número predefinido o arredondamento é realizado.

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