MidpointRounding Enumeráció
Definíció
Fontos
Egyes információk olyan, kiadás előtti termékekre vonatkoznak, amelyek a kiadásig még jelentősen módosulhatnak. A Microsoft nem vállal kifejezett vagy törvényi garanciát az itt megjelenő információért.
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
- 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 |