decimal (C#-Referenz)
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.
Text [Type] |
Ungefährer Bereich |
Genauigkeit |
.NET Framework-Typ |
---|---|---|---|
decimal |
(-7.9 x 1028 bis 7.9 x 1028) / (100 bis 28) |
28-29 signifikante Stellen |
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 zur 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 verursacht einen Compilerfehler, indem versucht, Double und decimal-Variablen hinzuzufügen.
double dub = 9;
// The following line causes an error that reads "Operator '+' cannot be applied to
// operands of type 'double' and 'decimal'"
Console.WriteLine(dec + dub);
// You can fix the error by using explicit casting of either operand.
Console.WriteLine(dec + (decimal)dub);
Console.WriteLine((double)dec + dub);
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 der C#-Sprachspezifikation. Die Sprachspezifikation ist die verbindliche Quelle für die Syntax und Verwendung von C#.
Siehe auch
Referenz
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)
Konzepte
Standardmäßige Zahlenformatzeichenfolgen