Freigeben über


Numerische Gleitkommatypen (C#-Referenz)

Die numerischen Gleitkommatypen stellen reelle Zahlen dar. Alle numerischen Gleitkommatypen sind Werttypen. Sie sind auch einfache Typen, und Sie können sie mithilfe von Literalen initialisieren. Alle numerischen Gleitkommatypen unterstützen arithmetic-, comparison- und equality-Operatoren.

Die C#-Sprachreferenz dokumentiert die zuletzt veröffentlichte Version der C#-Sprache. Außerdem enthält sie erste Dokumentation für Features in der öffentlichen Vorschau für die kommende Sprachversion.

In der Dokumentation werden alle Features identifiziert, die in den letzten drei Versionen der Sprache oder in der aktuellen öffentlichen Vorschau eingeführt wurden.

Tipp

Informationen dazu, wann ein Feature erstmals in C# eingeführt wurde, finden Sie im Artikel zum Versionsverlauf der C#-Sprache.

Merkmale der Gleitkommatypen

C# unterstützt die folgenden vordefinierten Gleitkommatypen:

C#-Typ/Schlüsselwort Ungefährer Bereich Präzision Size .NET-Typ
float ±1,5 x 10−45 bis ±3,4 x 1038 ~6–9 Stellen 4 Byte System.Single
double ±5.0 × 10−324 bis ±1,7 × 10308 ~15–17 Stellen 8 Byte System.Double
decimal ±1.0 × 10-28 to ±7.9228 × 1028 28-29 Stellen 16 Bytes System.Decimal

In der vorherigen Tabelle ist jedes C#-Typ-Schlüsselwort aus der spalte ganz links ein Alias für den entsprechenden .NET-Typ. Sie sind austauschbar. Die folgenden Deklarationen deklarieren beispielsweise Variablen desselben Typs:

double a = 12.3;
System.Double b = 12.3;

Der Standardwert jedes Gleitkommatyps ist null, 0. Die einzelnen Gleitkommatypen verfügen jeweils über die Konstanten MinValue und MaxValue, die den minimalen und maximalen Endwert des Typs angeben. Die Typen float und double verfügen auch über Konstanten, die nicht numerische Werte und Unendlichkeitswerte darstellen. Der typ double stellt beispielsweise die folgenden Konstanten bereit: Double.NaN, Double.NegativeInfinityund Double.PositiveInfinity.

Der decimal Typ ist geeignet, wenn der erforderliche Genauigkeitsgrad durch die Anzahl der Ziffern rechts vom Dezimalkomma bestimmt wird. Solche Zahlen werden häufig in Finanzanwendungen verwendet, für Währungsbeträge (z. B. 1,00 $), Zinssätze (z. B. 2,625%) usw. Auch Zahlen, die auf eine Dezimalstelle genau sind, werden durch den Typ decimal genauer dargestellt: 0,1 kann beispielsweise genau durch eine Instanz von decimal dargestellt werden, während es keine Instanz von double oder float gibt, die genau 0,1 darstellt. Aufgrund dieses Unterschieds bei numerischen Typen können unerwartete Rundungsfehler bei arithmetischen Berechnungen auftreten, wenn Sie double oder float für Dezimaldaten verwenden. Sie können double anstelle von decimal verwenden, wenn die Optimierung der Leistung wichtiger als die Genauigkeit ist. Allerdings ist jeder Unterschied bei der Leistung von allen, aber den meisten berechnungsintensiven Anwendungen unbemerkt. Ein weiterer möglicher Grund, decimal zu vermeiden, besteht darin, die Speicheranforderungen zu minimieren. Beispielsweise verwendet ML.NETfloat, da sich die Differenz zwischen 4 Bytes und 16 Bytes bei sehr großen Datensätzen summiert. Weitere Informationen finden Sie unter System.Decimal.

Sie können integrale Typen sowie die Typen float und double in einem Ausdruck kombinieren. In diesem Fall werden integrale Typen implizit in einen der Gleitkommatypen konvertiert, und bei Bedarf wird der float Typ implizit in doublekonvertiert. Der Ausdruck wird wie folgt ausgewertet:

  • Wenn ein Typ im Ausdruck vorhanden ist double , wird der Ausdruck als doubleoder bool in relationalen und Gleichheitsvergleichen ausgewertet.
  • Wenn kein Typ im Ausdruck vorhanden ist double , wird der Ausdruck als floatoder bool in relationalen und Gleichheitsvergleichen ausgewertet.

Sie können auch integrale Typen und den decimal Typ in einem Ausdruck kombinieren. In diesem Fall werden integrale Typen implizit in den decimal-Typ konvertiert, und der Ausdruck wird als decimal oder bool in relationalen Vergleichen und Gleichheitsvergleichen ausgewertet.

Sie können den decimal Typ nicht mit den float Typen double in einem Ausdruck kombinieren. Wenn Sie in diesem Fall arithmetische, Vergleichs- oder Gleichheitsoperationen ausführen möchten, müssen Sie die Operanden explizit vom oder zum Typ decimal konvertieren, wie im folgenden Beispiel gezeigt:

double a = 1.0;
decimal b = 2.1m;
Console.WriteLine(a + (double)b);
Console.WriteLine((decimal)a + b);

Zum Formatieren eines Gleitkommawerts können Sie standardmäßige Zahlenformatzeichenfolgen oder benutzerdefinierte Zahlenformatzeichenfolgen verwenden.

Real-Literale

Das Suffix für ein reales Literal bestimmt seinen Typ:

  • Ein Literal ohne Suffix oder mit dem dD Suffix ist ein double.
  • Ein Literal mit dem f Oder F Suffix ist ein float.
  • Ein Literal mit dem m Oder M Suffix ist ein decimal.

Der folgende Code zeigt ein Beispiel für jeden Typ:

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;

Das vorherige Beispiel zeigt auch die Verwendung von _ als Zifferntrennzeichen. Sie können das Zifferntrennzeichen mit allen Arten numerischer Literale verwenden.

Sie können auch wissenschaftliche Schreibweise verwenden, die einen exponenten Teil eines echten Literals angibt, wie im folgenden Beispiel gezeigt:

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

Umwandlungen

Es gibt nur eine implizite Konvertierung zwischen numerischen Gleitkommatypen: von float zu double. Sie können jedoch jeden Gleitkommatyp in einen anderen Gleitkommatyp konvertieren, indem Sie die explizite Umwandlung verwenden. Weitere Informationen finden Sie unter Integrierte numerische Konvertierungen (C#-Referenz) (Integrierte numerische Konvertierungen).

C#-Sprachspezifikation

Weitere Informationen finden Sie in den folgenden Abschnitten der C#-Sprachspezifikation:

Weitere Informationen