decimal (C#-Referenz)

Aktualisiert: November 2007

Das decimal-Schlüsselwort kennzeichnet einen 128-Bit-Datentyp. Im Vergleich zu Gleitkommatypen verfügt der decimal-Typ über höhere Genauigkeit und einen kleineren Wertebereich. Dadurch eignet er sich für Finanz- und Währungskalkulationen. Der folgenden Tabelle können Sie den ungefähren Bereich und die Genauigkeit des decimal-Typs entnehmen.

Typ

Ungefährer Bereich

Genauigkeit

.NET Framework-Typ

decimal

±1.0 × 10-28 bis ±7,9 × 1028

28-29 signifikante Stellen

System.Decimal

Literale

Wenn ein echtes numerisches Literal als decimal behandelt werden soll, verwenden Sie das Suffix m oder M. Beispiel:

decimal myMoney = 300.5m;

Ohne das Suffix m wird die Zahl als double behandelt, was zu einem Compilerfehler führt.

Konvertierungen

Die ganzzahligen Typen werden implizit in decimal konvertiert, und das Ergebnis wird als decimal ausgewertet. Aus diesem Grund können Sie eine decimal-Variable mit einem Ganzzahlliteral ohne das Suffix initialisieren. Beispiel:

decimal myMoney = 300;

Es findet keine implizite Konvertierung zwischen Gleitkommatypen und dem decimal-Typ statt. Folglich muss die Konvertierung zwischen diesen beiden Typen mittels einer Typumwandlung durchgeführt werden. Beispiel:

decimal myMoney = 99.9m;
double x = (double)myMoney;
myMoney = (decimal)x;

decimal-Typen und numerische ganzzahlige Typen können auch gemeinsam im selben Ausdruck verwendet werden. Wenn Sie jedoch Gleitkomma- und decimal-Typen ohne Typumwandlung in einem Ausdruck verwenden, tritt ein Kompilierungsfehler auf.

Weitere Informationen zu impliziten numerischen Konvertierungen finden Sie unter Tabelle für implizite numerische Konvertierungen (C#-Referenz).

Weitere Informationen zu impliziten numerischen Konvertierungen finden Sie unter Tabelle für explizite numerische Konvertierungen (C#-Referenz).

Formatieren von Dezimalausgaben

Sie können die Ergebnisse unter Verwendung der String.Format-Methode oder der Console.Write-Methode formatieren, durch die String.Format() aufgerufen wird. Das Währungsformat wird mit der Standardwährungsformat-Zeichenfolge "C" oder "c" angegeben, wie in Beispiel 2 weiter unten in diesem Artikel dargestellt. Weitere Informationen über die String.Format-Methode finden Sie unter String.Format.

Beispiel

In diesem Beispiel werden decimal und int in demselben Ausdruck verwendet. Das Ergebnis wird als decimal-Typ ausgewertet.

Im folgenden Beispiel wird eine Anweisung verwendet, die versucht, die double-Variable und decimal-Variable hinzuzufügen:

double x = 9;
Console.WriteLine(d + x); // Error

Das Ergebnis ist der folgende Fehler:

Operator '+' cannot be applied to operands of type 'double' and 'decimal'

public class TestDecimal
{
    static void Main()
    {
        decimal d = 9.1m;
        int y = 3;
        Console.WriteLine(d + y);   // Result converted to decimal
    }
}
// Output: 12.1

In diesem Beispiel wird die Ausgabe mit der Währungsformatzeichenfolge formatiert. Beachten Sie, dass x gerundet wird, da mehr Dezimalstellen als im Format $0.99 vorhanden sind. Die Variable y, die die maximale Anzahl exakter Stellen darstellt, wird genau im richtigen Format angezeigt.

public class TestDecimalFormat
{
    static void Main()
    {
        decimal x = 0.999m;
        decimal y = 9999999999999999999999999999m;
        Console.WriteLine("My amount = {0:C}", x);
        Console.WriteLine("Your amount = {0:C}", y);
    }
}
/* Output:
    My amount = $1.00
    Your amount = $9,999,999,999,999,999,999,999,999,999.00
*/

C#-Programmiersprachenspezifikation

Weitere Informationen finden Sie in den folgenden Abschnitten von C#-Programmiersprachenspezifikation:

  • 1.3 Typen und Variablen

  • 4.1.7 Der Typ "decimal"

Siehe auch

Konzepte

C#-Programmierhandbuch

Referenz

C#-Schlüsselwörter

Tabelle ganzzahliger Typen (C#-Referenz)

Tabelle integrierter Typen (C#-Referenz)

Tabelle für implizite numerische Konvertierungen (C#-Referenz)

Tabelle für explizite numerische Konvertierungen (C#-Referenz)

Decimal

Weitere Ressourcen

C#-Referenz