MidpointRounding Enumeráció

Definíció

Meghatározza azt a stratégiát, amelyet a matematikai kerekítési módszereknek használniuk kell egy szám kerekítéséhez.

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
Öröklődés
MidpointRounding
Attribútumok

Mezők

Name Érték Description
ToEven 0

A legközelebbi számra kerekítés stratégiája. Ha egy szám két másik félúton van, akkor a legközelebbi páros szám felé kerekítve lesz. A nem középponti értékeket ez a választás nem érinti, és a legközelebbi ábrázolható értékre kerekítve van. Más néven banker kerekítése.

AwayFromZero 1

A legközelebbi számra kerekítés stratégiája. Ha egy szám félúton van két másik között, akkor a legközelebbi szám felé kerekítve lesz, amely távol van a nullától. A nem középponti értékeket ez a választás nem érinti, és a legközelebbi ábrázolható értékre kerekítve van.

ToZero 2

A nulla felé irányuló kerekítés stratégiája, amelyben minden érték – nem csak a középpontok – nulla felé kerekül. Az eredmény a legközelebbi érték, és nem nagyobb, mint a végtelenül pontos eredmény. Nulla számjegyre kerekítéskor ez a csonkolásnak felel meg; ha nem nulla számú számjegyre kerekít, akkor a megadott pontosság szerint csonkolja a nulla felé.

ToNegativeInfinity 3

A lefelé irányuló kerekítés stratégiája, amelyben minden érték – nem csak a középpontok – a negatív végtelen felé kerekül. Az eredmény a legközelebbi érték, és nem nagyobb, mint a végtelenül pontos eredmény. Nulla számjegyre kerekítéskor ez egyenértékű a matematikai alapfüggvényével; Ha nem nulla számú számjegyre kerekít, ugyanazt a viselkedést alkalmazza a megadott pontossággal.

ToPositiveInfinity 4

A felfelé irányuló kerekítés stratégiája, ahol minden érték – nem csak a középpontok – a pozitív végtelen felé kerekül. Az eredmény a végtelenül pontos eredményhez legközelebbi és nem kisebb érték. Nulla számjegyre kerekítéskor ez egyenértékű a matematikai plafonfüggvényével; Ha nem nulla számú számjegyre kerekít, ugyanazt a viselkedést alkalmazza a megadott pontosságon.

Példák

Az alábbi példa az Math.Round enumerálással együtt mutatja be a metódust 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)
'

Megjegyzések

Használja az MidpointRounding enumerálást a megfelelő Math.Round, MathF.Round és Decimal.Round túlterhelésekkel, hogy biztosítsa a kerekítési folyamat jobb irányítását.

Az enumerálás neve ellenére nem minden mód csak a középpontok kezeléséről szól. MidpointRounding Két általános kerekítési stratégiát határoz meg – a legközelebbi és irányított kerekítésre kerekítést –, és minden enumerálási mező pontosan az alábbi stratégiák egyikében vesz részt:

  • A legközelebbi módok (AwayFromZero és ToEven) mindig a legközelebbi ábrázolható értékre kerekíthetők. Csak akkor különböznek egymástól, ha a bemenet pontosan félúton van két érték (egy középpont) között, erre utal az enumerálás neve.
  • Az irányított kerekítési módok (ToNegativeInfinityToPositiveInfinityés ToZero) mindig rögzített irányban kerekítettek minden értéket – nem csak a középpontokat. Az eredmény a legközelebbi ábrázolható érték ebben az irányban, még akkor is, ha a bemenet nem középpont.

Kerekítés a legközelebbi értékre

Fields:

A kerekítés a legközelebbi művelethez implicit vagy meghatározott pontosságú eredeti számot vesz fel; megvizsgálja a következő számjegyet, amely ezen a pontosságon plusz egy; és a legközelebbi számot adja vissza ugyanolyan pontossággal, mint az eredeti szám. Pozitív számok esetén, ha a következő számjegy 0 és 4 között van, a legközelebbi szám a negatív végtelen felé tart. Ha a következő számjegy 6 és 9 között van, a legközelebbi szám a pozitív végtelen felé tart. Negatív számok esetén, ha a következő számjegy 0 és 4 között van, a legközelebbi szám a pozitív végtelen felé tart. Ha a következő számjegy 6 és 9 között van, a legközelebbi szám a negatív végtelen felé tart.

Ha a következő számjegy 0-tól 4-től 6-tól 9-ig tart, a kerekítési művelet eredményére nincs hatással a választás AwayFromZeroToEven . Ha azonban a következő számjegy 5, amely két lehetséges eredmény közötti középpont, és az összes többi számjegy nulla, vagy nincsenek még számjegyek, a legközelebbi szám nem egyértelmű. Ebben az esetben a kerekítési módok MidpointRounding lehetővé teszik annak megadását, hogy a kerekítési művelet a nullától legtávolabb eső legközelebbi számot vagy a legközelebbi páros számot adja eredményül.

Az alábbi táblázat néhány negatív és pozitív szám kerekítésének eredményeit mutatja be a legközelebbi egész számhoz való kerekítés módjaival együtt. A számok kerekítéséhez használt pontosság nulla, ami azt jelenti, hogy a tizedesvessző utáni szám hatással van a kerekítési műveletre. A -2,5 számnál például a tizedesvessző utáni számjegy 5. Mivel ez a számjegy a középpont, a kerekítés eredményét egy MidpointRounding érték használatával határozhatja meg. Ha meg van adva AwayFromZero, a -3 érték kerül visszaadásra, mert ez a legközelebbi szám a nullához nulla pontosság mellett. Ha a ToEven meg van adva, a -2 kerül visszaadásra, mert ez a legközelebbi páros szám nulla tizedesértékkel.

Eredeti szám 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

Irányított kerekítés

Fields:

Az irányított kerekítési művelet implicit vagy meghatározott pontosságú eredeti számot vesz fel, és a legközelebbi számot egy adott irányban adja vissza, ugyanolyan pontossággal, mint az eredeti szám. Az irányított módok vezérli MidpointRounding az irányt, amely felé minden érték kerekítve van. A legközelebbi ciklikus módokkal ellentétben ezek a módok minden bemeneti értékre érvényesek, nem csak a középpontokra; Például a 2.1, ToPositiveInfinity 2.5 és 2.8 kerekítése 3-ra.

Az alábbi táblázat néhány negatív és pozitív szám kerekítésének eredményeit mutatja be az irányított kerekítési módokkal együtt. A számok kerekítéséhez használt pontosság nulla, ami azt jelenti, hogy a tizedesvessző előtti számot befolyásolja a kerekítési művelet.

Eredeti szám 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

A következőre érvényes: