MidpointRounding Enumerazione

Definizione

Specifica la strategia che i metodi di arrotondamento matematico devono usare per arrotondare un numero.

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
Ereditarietà
MidpointRounding
Attributi

Campi

Nome Valore Descrizione
ToEven 0

La strategia di arrotondamento al numero più vicino e quando un numero è a metà strada tra due altri, viene arrotondato verso il numero pari più vicino.

AwayFromZero 1

La strategia di arrotondamento al numero più vicino e quando un numero è a metà tra due altri, viene arrotondato al numero più vicino che è lontano da zero.

ToZero 2

Strategia di arrotondamento diretto verso zero, con il risultato più vicino e non maggiore di grandezza rispetto al risultato infinitamente preciso.

ToNegativeInfinity 3

La strategia di arrotondamento verso il basso, con il risultato più vicino e non maggiore del risultato infinitamente preciso.

ToPositiveInfinity 4

La strategia di arrotondamento verso l'alto, con il risultato più vicino e non inferiore al risultato infinitamente preciso.

Esempio

Nell'esempio seguente viene illustrato il Math.Round metodo insieme all'enumerazione 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)
'

Commenti

Usare l'enumerazione MidpointRounding con overload appropriati di Math.Round, MathF.Round e Decimal.Round per fornire un maggiore controllo del processo di arrotondamento.

Esistono due strategie generali di arrotondamento, arrotondamento più vicino e diretto, e ogni campo di enumerazione partecipa esattamente a una di queste strategie.

Arrotondare al numero più vicino

Campi:

Un'operazione round-to-near più vicina accetta un numero originale con una precisione implicita o specificata; esamina la cifra successiva, che corrisponde a quella precisione più uno; e restituisce il numero più vicino con la stessa precisione del numero originale. Per i numeri positivi, se la cifra successiva è compresa tra 0 e 4, il numero più vicino è verso l'infinito negativo. Se la cifra successiva è compresa tra 6 e 9, il numero più vicino è verso l'infinito positivo. Per i numeri negativi, se la cifra successiva è compresa tra 0 e 4, il numero più vicino è verso l'infinito positivo. Se la cifra successiva è compresa tra 6 e 9, il numero più vicino è verso l'infinito negativo.

Se la cifra successiva è compresa tra 0 e 4 o 6 o 9, e MidpointRounding.AwayFromZeroMidpointRounding.ToEven non influisce sul risultato dell'operazione di arrotondamento. Tuttavia, se la cifra successiva è 5, ovvero il punto intermedio tra due possibili risultati e tutte le cifre rimanenti sono pari a zero o non ci sono cifre rimanenti, il numero più vicino è ambiguo. In questo caso, le modalità di arrotondamento al più vicino in MidpointRounding consentono di specificare se l'operazione di arrotondamento restituisce il numero più vicino lontano da zero oppure il numero pari più vicino.

La tabella seguente illustra i risultati dell'arrotondamento di alcuni numeri negativi e positivi in combinazione con le modalità di arrotondamento al più vicino. La precisione utilizzata per arrotondare i numeri è zero, ovvero il numero dopo il separatore decimale influisce sull'operazione di arrotondamento. Ad esempio, per il numero -2,5, la cifra dopo il separatore decimale è 5. Poiché tale cifra è il punto intermedio, è possibile usare un MidpointRounding valore per determinare il risultato dell'arrotondamento. Se AwayFromZero viene specificato, viene restituito -3 perché è il numero più vicino a zero con una precisione pari a zero. Se ToEven viene specificato, viene restituito -2 perché è il numero pari più vicino con una precisione pari a zero.

Numero originale 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

Arrotondamento diretto

Campi:

Un'operazione di arrotondamento diretto accetta un numero originale con una precisione implicita o specificata e restituisce il numero più vicino successivo in una direzione specifica con la stessa precisione del numero originale. Modalità dirette sul MidpointRounding controllo verso cui viene eseguito il numero predefinito di arrotondamento.

La tabella seguente illustra i risultati dell'arrotondamento di alcuni numeri negativi e positivi in combinazione con le modalità di arrotondamento diretto. La precisione utilizzata per arrotondare i numeri è zero, ovvero il numero prima che il separatore decimale sia interessato dall'operazione di arrotondamento.

Numero originale 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

Si applica a