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 , resulteert doublede expressie in of bool in relationele vergelijkingen en gelijkheidsvergelijkingen.
  • Als er geen double type in de expressie is, resulteert floatde expressie in of bool 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 decimalin , 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 of D achtervoegsel is van het type double
  • De letterlijke tekst met het of F achtervoegsel is van het f typefloat
  • De letterlijke tekst met het of M achtervoegsel is van het m 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:

Zie ook