MidpointRounding Wyliczenie
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Określa strategię używaną przez metody zaokrąglania matematycznego do zaokrąglania liczby.
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
- Dziedziczenie
- Atrybuty
Pola
AwayFromZero | 1 | Strategia zaokrąglania do najbliższej liczby, a gdy liczba jest w połowie między dwiema innymi, jest zaokrąglona w kierunku najbliższej liczby, która jest od zera. |
ToEven | 0 | Strategia zaokrąglania do najbliższej liczby, a gdy liczba jest w połowie między dwiema innymi, jest zaokrąglona w kierunku najbliższej liczby parzysta. |
ToNegativeInfinity | 3 | Strategia zaokrąglania skierowanego w dół, z wynikiem najbliżej i nie większe niż nieskończonie precyzyjny wynik. |
ToPositiveInfinity | 4 | Strategia zaokrąglania skierowanego w górę, z wynikiem najbliżej i nie mniej niż nieskończonie precyzyjny wynik. |
ToZero | 2 | Strategia ukierunkowana zaokrąglania w kierunku zera, z wynikiem najbliżej i nie większej wielkości niż nieskończonie precyzyjny wynik. |
Przykłady
W poniższym przykładzie pokazano metodę Math.Round w połączeniu z wyliczeniem 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)
'
Uwagi
Użyj MidpointRounding
z odpowiednimi przeciążeniami Math.Roundelementów , MathF.Roundi Decimal.Round w celu zapewnienia większej kontroli nad procesem zaokrąglania.
Istnieją dwie ogólne strategie zaokrąglania, zaokrąglone do najbliższego i bezpośredniego zaokrąglania, a każde pole wyliczania bierze udział w dokładnie jednej z tych strategii.
Zaokrąglaj do najbliższej
Pola:
Operacja zaokrąglana do najbliższej przyjmuje oryginalną liczbę z niejawną lub określoną precyzją; sprawdza następną cyfrę, która jest w tej precyzji plus jedna; metoda i zwraca najbliższą liczbę z taką samą dokładnością jak oryginalna liczba. W przypadku liczb dodatnich, jeśli następna cyfra wynosi od 0 do 4, najbliższa liczba jest w kierunku nieskończoności ujemnej. Jeśli następna cyfra wynosi od 6 do 9, najbliższa liczba jest w kierunku nieskończoności dodatniej. W przypadku liczb ujemnych, jeśli następna cyfra wynosi od 0 do 4, najbliższa liczba jest w kierunku nieskończoności dodatniej. Jeśli następna cyfra wynosi od 6 do 9, najbliższa liczba jest w kierunku nieskończoności ujemnej.
Jeśli następna cyfra wynosi od 0 do 4 lub 6 do 9, MidpointRounding.AwayFromZero
MidpointRounding.ToEven
i nie ma wpływu na wynik operacji zaokrąglania. Jeśli jednak następna cyfra to 5, czyli punkt środkowy między dwoma możliwymi wynikami, a wszystkie pozostałe cyfry są zerowe lub nie ma żadnych pozostałych cyfr, najbliższa liczba jest niejednoznaczna. W takim przypadku tryby MidpointRounding
zaokrąglone do najbliższego umożliwiają określenie, czy operacja zaokrąglania zwraca najbliższą liczbę z dala od zera, czy najbliższą liczbę parzystą.
W poniższej tabeli przedstawiono wyniki zaokrąglania niektórych liczb ujemnych i dodatnich w połączeniu z trybami zaokrąglanymi do najbliższych. Precyzja używana do zaokrąglania liczb jest równa zero, co oznacza, że liczba po przecinku dziesiętnego wpływa na operację zaokrąglania. Na przykład dla liczby -2,5 cyfra po przecinku dziesiętnym wynosi 5. Ponieważ ta cyfra jest punktem środkowym MidpointRounding
, można użyć wartości, aby określić wynik zaokrąglania. Jeśli AwayFromZero
określono wartość , zwracana jest wartość -3, ponieważ jest to najbliższa liczba z dala od zera z dokładnością do zera. Jeśli ToEven
określono wartość , zwracana jest wartość -2, ponieważ jest to najbliższa liczba parzysta z dokładnością do zera.
Oryginalna liczba | 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 |
Zaokrąglanie skierowane
Pola:
Operacja zaokrąglania skierowanego przyjmuje oryginalną liczbę z niejawną lub określoną precyzją i zwraca następną najbliższą liczbę w określonym kierunku z taką samą dokładnością jak liczba oryginalna. Tryby kierowane w MidpointRounding
kontrolce, w kierunku której jest wykonywana wstępnie zdefiniowana liczba zaokrąglania.
W poniższej tabeli przedstawiono wyniki zaokrąglania niektórych liczb ujemnych i dodatnich w połączeniu z trybami zaokrąglania skierowanego. Precyzja używana do zaokrąglania liczb wynosi zero, co oznacza, że na liczbę przed przecink dziesiętny ma wpływ operacja zaokrąglania.
Oryginalna liczba | 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 |