Numerieke typen drijvende komma (C#-verwijzing)
De numerieke typen drijvende komma vertegenwoordigen reële getallen. Alle numerieke typen drijvende komma zijn waardetypen. Ze zijn ook eenvoudige typen en kunnen worden geïnitialiseerd met letterlijke gegevens. Alle numerieke typen drijvende komma ondersteunen rekenkundige, vergelijkings- en gelijkheidsoperators.
Kenmerken van de typen drijvende komma
C# ondersteunt de volgende vooraf gedefinieerde typen drijvende komma:
C#-type/trefwoord | Bereik bij benadering | Precisie | Tekengrootte | .NET-type |
---|---|---|---|---|
float |
±1,5 x 10−45 tot ±3,4 x 1038 | ~6-9 cijfers | 4 bytes | System.Single |
double |
±5,0 × 10−324 tot ±1,7 × 10308 | ~15-17 cijfers | 8 bytes | System.Double |
decimal |
±1,0 x 10-28 tot ±7.9228 x 1028 | 28-29 cijfers | 16 bytes | System.Decimal |
In de voorgaande tabel is elk C#-type trefwoord uit de meest linkse kolom een alias voor het bijbehorende .NET-type. Ze zijn uitwisselbaar. De volgende declaraties declareren bijvoorbeeld variabelen van hetzelfde type:
double a = 12.3;
System.Double b = 12.3;
De standaardwaarde van elk type drijvende komma is nul, 0
. Elk van de typen drijvende komma heeft de MinValue
en MaxValue
constanten die de minimale en maximale eindige waarde van dat type bieden. De float
en double
typen bieden ook constanten die niet-een-getal- en oneindigheidswaarden vertegenwoordigen. Het type bevat bijvoorbeeld double
de volgende constanten: Double.NaN, Double.NegativeInfinityen Double.PositiveInfinity.
Het decimal
type is geschikt wanneer de vereiste mate van precisie wordt bepaald door het aantal cijfers rechts van het decimaalteken. Dergelijke getallen worden vaak gebruikt in financiële toepassingen, voor valutabedragen (bijvoorbeeld $ 1,00), rentepercentages (bijvoorbeeld 2,625%), enzovoort. Zelfs getallen die nauwkeurig zijn tot slechts één decimaal cijfer, worden nauwkeuriger verwerkt door het decimal
type: 0,1, bijvoorbeeld, kunnen exact worden weergegeven door een decimal
exemplaar, terwijl er geen double
of float
exemplaar is dat precies 0,1 vertegenwoordigt. Vanwege dit verschil in numerieke typen kunnen onverwachte afrondingsfouten optreden in rekenkundige berekeningen wanneer u of float
voor decimale gegevens gebruiktdouble
. U kunt double
in plaats van decimal
wanneer u de prestaties optimaliseert belangrijker is dan nauwkeurigheid te garanderen. Elk verschil in prestaties zou echter onopgemerkt gaan door alle, maar de meest rekenintensieve toepassingen. Een andere mogelijke reden om te vermijden decimal
is om de opslagvereisten te minimaliseren. Bijvoorbeeld, ML.NET gebruikt float
omdat het verschil tussen 4 bytes en 16 bytes telt voor zeer grote gegevenssets. Zie System.Decimal voor meer informatie.
U kunt integrale typen en de float
typen double
in een expressie combineren. In dit geval worden integrale typen impliciet geconverteerd naar een van de typen drijvende komma en, indien nodig, wordt het float
type impliciet geconverteerd naar double
. De expressie wordt als volgt geëvalueerd:
- Als er een type in de expressie is
double
, resulteertdouble
de expressie in ofbool
in relationele vergelijkingen en gelijkheidsvergelijkingen. - Als er geen
double
type in de expressie is, resulteertfloat
de expressie in ofbool
in relationele vergelijkingen en gelijkheidsvergelijkingen.
U kunt ook integrale typen en het decimal
type in een expressie combineren. In dit geval worden integrale typen impliciet geconverteerd naar het decimal
type en de expressie resulteert decimal
in , of in bool
relationele en gelijkheidsvergelijkingen.
U kunt het decimal
type niet combineren met het float
type en double
typen in een expressie. Als u in dit geval rekenkundige bewerkingen, vergelijkingen of gelijkheidsbewerkingen wilt uitvoeren, moet u de operanden expliciet converteren van of naar het decimal
type, zoals in het volgende voorbeeld wordt weergegeven:
double a = 1.0;
decimal b = 2.1m;
Console.WriteLine(a + (double)b);
Console.WriteLine((decimal)a + b);
U kunt standaardtekenreeksen voor numerieke notatie of aangepaste numerieke notatietekenreeksen gebruiken om een drijvende-kommawaarde op te maken.
Echte letterlijke gegevens
Het type echte letterlijke wordt als volgt bepaald door het achtervoegsel:
- De letterlijke tekst zonder achtervoegsel of met het
d
ofD
achtervoegsel is van het typedouble
- De letterlijke tekst met het of
F
achtervoegsel is van hetf
typefloat
- De letterlijke tekst met het of
M
achtervoegsel is van hetm
typedecimal
In de volgende code ziet u een voorbeeld van elk van deze code:
double d = 3D;
d = 4d;
d = 3.934_001;
float f = 3_000.5F;
f = 5.4f;
decimal myMoney = 3_000.5m;
myMoney = 400.75M;
In het voorgaande voorbeeld ziet u ook het gebruik van _
als scheidingsteken voor cijfers. U kunt het scheidingsteken voor cijfers gebruiken met allerlei numerieke letterlijke waarden.
U kunt ook wetenschappelijke notatie gebruiken, dat wil gezegd, een exponentgedeelte van een echte letterlijke waarde opgeven, zoals in het volgende voorbeeld wordt weergegeven:
double d = 0.42e2;
Console.WriteLine(d); // output 42
float f = 134.45E-2f;
Console.WriteLine(f); // output: 1.3445
decimal m = 1.5E6m;
Console.WriteLine(m); // output: 1500000
Conversies
Er is slechts één impliciete conversie tussen numerieke typen met drijvende komma: van float
tot double
. U kunt elk type drijvende komma echter converteren naar elk ander type drijvende komma met de expliciete cast. Zie ingebouwde numerieke conversies voor meer informatie.
C#-taalspecificatie
Zie de volgende secties van de C#-taalspecificatie voor meer informatie: