Numerische Gleitkommatypen (C#-Referenz)Floating-point numeric types (C# reference)

Die Gleitkommatypen sind eine Teilmenge der einfachen Typen und können mit Literalen initialisiert werden.The floating-point types are a subset of the simple types and can be initialized with literals. Alle Gleitkommatypen sind auch Werttypen.All floating-point types are also value types. Alle numerischen Gleitkommatypen unterstützen arithmetic-, comparison- und equality-Operatoren.All floating-point numeric types support arithmetic, comparison, and equality operators.

Merkmale der GleitkommatypenCharacteristics of the floating-point types

C# unterstützt die folgenden vordefinierten Gleitkommatypen:C# supports the following predefined floating-point types:

C#-Typ/SchlüsselwortC# type/keyword Ungefährer BereichApproximate range GenauigkeitPrecision GrößeSize .NET-Typ.NET type
float ±1.5 × 10−45 zu ±3.4 × 1038±1.5 x 10−45 to ±3.4 x 1038 ~6–9 Stellen~6-9 digits 4 Bytes4 bytes System.Single
double ±5,0 × 10−324 bis ±1,7 × 10308±5.0 × 10−324 to ±1.7 × 10308 ~15–17 Stellen~15-17 digits 8 Bytes8 bytes System.Double
decimal ±1.0 × 10-28 to ±7.9228 × 1028±1.0 x 10-28 to ±7.9228 x 1028 28-29 Stellen28-29 digits 16 Bytes16 bytes System.Decimal

In der obigen Tabelle ist jedes C#-Typschlüsselwort aus der äußerst linken Spalte ein Alias für den entsprechenden .NET-Typ.In the preceding table, each C# type keyword from the leftmost column is an alias for the corresponding .NET type. Sie können synonym verwendet werden.They are interchangeable. In den folgenden Deklarationen werden beispielsweise Variablen des gleichen Typs deklariert:For example, the following declarations declare variables of the same type:

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

Der Standardwert jedes Gleitkommatyps ist Null (0).The default value of each floating-point type is zero, 0. Die einzelnen Gleitkommatypen verfügen jeweils über die Konstanten MinValue und MaxValue, die den minimalen und maximalen Endwert des Typs angeben.Each of the floating-point types has the MinValue and MaxValue constants that provide the minimum and maximum finite value of that type. Die Typen float und double verfügen auch über Konstanten, die nicht numerische Werte und Unendlichkeitswerte darstellen.The float and double types also provide constants that represent not-a-number and infinity values. Der Typ double verfügt beispielsweise über folgende Konstanten: Double.NaN, Double.NegativeInfinity und Double.PositiveInfinity.For example, the double type provides the following constants: Double.NaN, Double.NegativeInfinity, and Double.PositiveInfinity.

Da der Typ decimal über eine höhere Genauigkeit und einen kleineren Bereich verfügt als float und double, eignet er sich für Finanz- und Währungskalkulationen.Because the decimal type has more precision and a smaller range than both float and double, it's appropriate for financial and monetary calculations.

Sie können integrale Typen und Gleitkommatypen in einem Ausdruck kombinieren.You can mix integral types and floating-point types in an expression. In diesem Fall werden die ganzzahligen Typen in Gleitkommatypen konvertiert.In this case, the integral types are converted to floating-point types. Die Auswertung des Ausdrucks erfolgt gemäß den folgenden Regeln:The evaluation of the expression is performed according to the following rules:

  • Wenn einer der Gleitkommatypen double ist, wird der Ausdruck in double oder in bool in relationalen Vergleichen oder in Vergleichen auf Gleichheit ausgewertet.If one of the floating-point types is double, the expression evaluates to double, or to bool in relational and equality comparisons.
  • Wenn kein double-Typ im Ausdruck vorhanden ist, wird der Ausdruck in float oder in relationalen Vergleichen oder Vergleichen auf Gleichheit in bool ausgewertet.If there is no double type in the expression, the expression evaluates to float, or to bool in relational and equality comparisons.

Ein Gleitkomma-Ausdruck kann die folgenden Sätze von Werten enthalten:A floating-point expression can contain the following sets of values:

  • Positiv und negativ 0 (null)Positive and negative zero
  • Positiv und negativ unendlichPositive and negative infinity
  • Not-a-Number-Wert (NaN)Not-a-Number value (NaN)
  • Die begrenzte Menge von Werten ungleich NullThe finite set of nonzero values

Weitere Informationen zu diesen Werten finden Sie im IEEE-Standard für binäre Gleitkommaarithmetik auf der IEEE-Website.For more information about these values, see IEEE Standard for Binary Floating-Point Arithmetic, available on the IEEE website.

Zum Formatieren eines Gleitkommawerts können Sie standardmäßige Zahlenformatzeichenfolgen oder benutzerdefinierte Zahlenformatzeichenfolgen verwenden.You can use either standard numeric format strings or custom numeric format strings to format a floating-point value.

Real-LiteraleReal literals

Der Typ eines Real-Literals wird wie folgt durch sein Suffix bestimmt:The type of a real literal is determined by its suffix as follows:

  • Das Literal ohne Suffix oder mit dem Suffix d oder D ist vom Typ double.The literal without suffix or with the d or D suffix is of type double
  • Das Literal mit dem Suffix f oder F ist vom Typ float.The literal with the f or F suffix is of type float
  • Das Literal mit dem Suffix m oder M ist vom Typ decimal.The literal with the m or M suffix is of type decimal

Der folgende Code zeigt ein Beispiel für jeden Typ:The following code demonstrates an example of each:

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, das ab C# 7.0 unterstützt wird.The preceding example also shows the use of _ as a digit separator, which is supported starting with C# 7.0. Sie können das Zifferntrennzeichen mit allen Arten numerischer Literale verwenden.You can use the digit separator with all kinds of numeric literals.

Sie können auch die wissenschaftliche Notation verwenden, d.h. einen exponentiellen Teil eines Real-Literals angeben, wie das folgende Beispiel zeigt:You also can use scientific notation, that is, specify an exponent part of a real literal, as the following example shows:

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

KonvertierungenConversions

Es gibt nur eine implizite Konvertierung zwischen numerischen Gleitkommatypen: von float zu double.There is only one implicit conversion between floating-point numeric types: from float to double. Allerdings können Sie einen Gleitkommatyp mit der expliziten Umwandlungin beliebige andere Gleitkommatypen konvertieren.However, you can convert any floating-point type to any other floating-point type with the explicit cast. Weitere Informationen finden Sie unter Integrierte numerische Konvertierungen (C#-Referenz) (Integrierte numerische Konvertierungen).For more information, see Built-in numeric conversions.

C#-SprachspezifikationC# language specification

Weitere Informationen finden Sie in den folgenden Abschnitten der C#-Sprachspezifikation:For more information, see the following sections of the C# language specification:

Siehe auchSee also