MidpointRounding Výčet

Definice

Určuje strategii, kterou by matematické metody zaokrouhlování měly použít k zaokrouhlení čísla.

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
Dědičnost
MidpointRounding
Atributy

Pole

Name Hodnota Description
ToEven 0

Strategie zaokrouhlení na nejbližší číslo Když je číslo v polovině mezi dvěma dalšími, zaokrouhlí se směrem k nejbližšímu sudýmu číslu. Na hodnoty mimo střední bod tato volba nemá vliv a zaokrouhlí se na nejbližší reprezentovatelnou hodnotu. Označuje se také jako bankovní zaokrouhlování.

AwayFromZero 1

Strategie zaokrouhlení na nejbližší číslo Když je číslo v polovině mezi dvěma dalšími, zaokrouhlí se směrem k nejbližšímu číslu, které není od nuly. Na hodnoty mimo střední bod tato volba nemá vliv a zaokrouhlí se na nejbližší reprezentovatelnou hodnotu.

ToZero 2

Strategie směrového zaokrouhlování směrem k nule, kde se každá hodnota (nejen střední body) zaokrouhluje směrem k nule. Výsledkem je hodnota, která je nejblíže a není větší v rozsahu, než je nekonečně přesný výsledek. Při zaokrouhlování na nula číslic je to ekvivalentní zkrácení; při zaokrouhlování na nenulový počet číslic se zkrátí směrem k nule při zadané přesnosti.

ToNegativeInfinity 3

Strategie zaokrouhlení směrem dolů, kde se každá hodnota ( nejen střední body) zaokrouhluje směrem k zápornému nekonečnu. Výsledkem je hodnota, která je nejblíže a není větší než nekonečně přesný výsledek. Při zaokrouhlování na nula číslic je to ekvivalentem matematické podlahové funkce; Při zaokrouhlování na nenulový počet číslic se použije stejné chování při zadané přesnosti.

ToPositiveInfinity 4

Strategie zaokrouhlování směrem nahoru, kde se každá hodnota (nejen střední body) zaokrouhluje směrem k kladnému nekonečnu. Výsledkem je hodnota, která je nejblíže a není menší než nekonečně přesný výsledek. Při zaokrouhlování na nula číslic je to ekvivalentní matematické funkci stropu; Při zaokrouhlování na nenulový počet číslic se použije stejné chování při zadané přesnosti.

Příklady

Následující příklad ukazuje metodu Math.Round ve spojení s výčtem 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)
'

Poznámky

Použijte výčet MidpointRounding s odpovídajícími přetíženími Math.Round, MathF.Round a Decimal.Round pro zajištění větší kontroly nad procesem zaokrouhlování.

Bez ohledu na název výčtu není každý režim pouze o tom, jak se zpracují střední body. MidpointRounding definuje dvě celkové strategie zaokrouhlení – zaokrouhlení na nejbližší a směrované zaokrouhlení – a každé pole výčtu se účastní přesně jedné z těchto strategií:

  • Režimy round-to-nearest (AwayFromZero a ToEven) vždy zaokrouhlují na nejbližší reprezentovatelnou hodnotu. Liší se od sebe, pouze když je vstup přesně v polovině mezi dvěma hodnotami ( střední bod), což je název výčtu odkazující na.
  • Režimy řízeného zaokrouhlování (ToNegativeInfinity, ToPositiveInfinitya ToZero) vždy zaokrouhlují každou hodnotu (nejen střední body) pevným směrem. Výsledkem je nejbližší reprezentovatelná hodnota v daném směru, i když vstup není střední bod.

Zaokrouhlení na nejbližší

Fields:

Operace zaokrouhlení na nejbližší přebírá původní číslo s implicitní nebo zadanou přesností; zkontroluje další číslici, která je s danou přesností plus jedna; a vrátí nejbližší číslo se stejnou přesností jako původní číslo. U kladných čísel platí, že pokud je další číslice od 0 do 4, nejbližší číslo je směrem k zápornému nekonečnu. Pokud je další číslice od 6 do 9, nejbližší číslo je směrem k kladnému nekonečnu. U záporných čísel platí, že pokud je další číslice od 0 do 4, nejbližší číslo je směrem k kladnému nekonečnu. Pokud je další číslice od 6 do 9, nejbližší číslo je směrem k zápornému nekonečnu.

Pokud je další číslice od 0 do 4 nebo 6 až 9, volba mezi AwayFromZero a ToEven nemá vliv na výsledek operace zaokrouhlení. Pokud je ale další číslice 5, což je střední bod mezi dvěma možnými výsledky a všechny zbývající číslice jsou nula nebo neexistují žádné zbývající číslice, nejbližší číslo je nejednoznačné. V tomto případě režimy zaokrouhlování na nejbližší v MidpointRounding umožňují určit, zda operace zaokrouhlování vrátí nejbližší číslo od nuly nebo nejbližší sudé číslo.

Následující tabulka ukazuje výsledky zaokrouhlení některých záporných a kladných čísel s použitím režimů zaokrouhlení na nejbližší. Přesnost použitá k zaokrouhlení čísel je nula, což znamená, že číslo za desetinnou čárkou ovlivňuje operaci zaokrouhlování. Například pro číslo -2,5 je číslice za desetinnou čárkou 5. Protože je tato číslice střední bod, můžete použít MidpointRounding hodnotu k určení výsledku zaokrouhlení. Pokud AwayFromZero je zadáno, vrátí se -3, protože je nejbližší číslo od nuly s přesností nuly. Pokud ToEven je zadáno, -2 se vrátí, protože se jedná o nejbližší sudé číslo s přesností nuly.

Původní číslo 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

Směrované zaokrouhlení

Fields:

Operace směrového zaokrouhlení přebírá původní číslo s implicitní nebo zadanou přesností a vrátí další nejbližší číslo v určitém směru se stejnou přesností jako původní číslo. Směrované režimy pro MidpointRounding řízení směru, ke kterému se zaokrouhluje každá hodnota. Na rozdíl od režimů zaokrouhlení na nejbližší se tyto režimy vztahují na každou vstupní hodnotu, nejen střední body; Například ToPositiveInfinity zaokrouhlí číslo 2,1, 2,5 a 2,8 až na 3.

Následující tabulka ukazuje výsledky zaokrouhlení některých záporných a kladných čísel ve spojení s režimy směrového zaokrouhlení. Přesnost použitá k zaokrouhlení čísel je nula, což znamená, že číslo před desetinnou čárkou je ovlivněno operací zaokrouhlení.

Původní číslo 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

Platí pro