decimal (C#-Referenz)decimal (C# Reference)

Das decimal-Schlüsselwort kennzeichnet einen 128-Bit-Datentyp.The decimal keyword indicates a 128-bit data type. Im Vergleich zu anderen Gleitkommatypen verfügt der decimal-Typ über höhere Genauigkeit und einen kleineren Wertebereich. Dadurch eignet er sich für Finanz- und Währungskalkulationen.Compared to other floating-point types, the decimal type has more precision and a smaller range, which makes it appropriate for financial and monetary calculations. Der folgenden Tabelle können Sie den ungefähren Bereich und die Genauigkeit des decimal-Typs entnehmen.The approximate range and precision for the decimal type are shown in the following table.

TypType Ungefährer BereichApproximate Range GenauigkeitPrecision .NET-Typ.NET type
decimal (-7.9 x 1028 bis 7.9 x 1028) / (100 bis 1028)(-7.9 x 1028 to 7.9 x 1028) / (100 to 1028) 28-29 signifikante Stellen28-29 significant digits System.Decimal

Der Standardwert eines decimal-Objekts ist 0m.The default value of a decimal is 0m.

LiteraleLiterals

Wenn ein echtes numerisches Literal als decimal behandelt werden soll, verwenden Sie das Suffix m oder M. Beispiel:If you want a numeric real literal to be treated as decimal, use the suffix m or M, for example:

decimal myMoney = 300.5m;

Ohne das Suffix „m“ wird die Zahl als double behandelt, was zu einem Compilerfehler führt.Without the suffix m, the number is treated as a double and generates a compiler error.

KonvertierungenConversions

Die ganzzahligen Typen werden implizit in decimal konvertiert, und das Ergebnis wird als decimal ausgewertet.The integral types are implicitly converted to decimal and the result evaluates to decimal. Aus diesem Grund können Sie eine decimal-Variable mit einem Ganzzahlliteral ohne das Suffix initialisieren. Beispiel:Therefore you can initialize a decimal variable using an integer literal, without the suffix, as follows:

decimal myMoney = 300;

Es findet keine implizite Konvertierung zwischen anderen Gleitkommatypen und dem decimal-Typ statt. Folglich muss die Konvertierung zwischen diesen beiden Typen mittels einer Typumwandlung durchgeführt werden.There is no implicit conversion between other floating-point types and the decimal type; therefore, a cast must be used to convert between these two types. Zum Beispiel:For example:

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.You can also mix decimal and numeric integral types in the same expression. Wenn Sie jedoch andere Gleitkomma- und decimal-Typen ohne Typumwandlung in einem Ausdruck verwenden, tritt ein Kompilierungsfehler auf.However, mixing decimal and other floating-point types without a cast causes a compilation error.

Weitere Informationen zu impliziten numerischen Konvertierungen finden Sie unter Tabelle für implizite numerische Konvertierungen.For more information about implicit numeric conversions, see Implicit Numeric Conversions Table.

Weitere Informationen zu expliziten numerischen Konvertierungen finden Sie unter Tabelle für explizite numerische Konvertierungen.For more information about explicit numeric conversions, see Explicit Numeric Conversions Table.

Formatieren von DezimalausgabenFormatting decimal output

Sie können die Ergebnisse mithilfe der String.Format-Methode oder der Console.Write-Methode formatieren, durch die String.Format() aufgerufen wird.You can format the results by using the String.Format method, or through the Console.Write method, which calls String.Format(). Das Währungsformat wird mit der Standardwährungsformat-Zeichenfolge "C" oder "c" angegeben, wie in Beispiel 2 weiter unten in diesem Artikel dargestellt.The currency format is specified by using the standard currency format string "C" or "c," as shown in the second example later in this article. Weitere Informationen zur String.Format-Methode finden Sie unter String.Format.For more information about the String.Format method, see String.Format.

BeispielExample

Im folgenden Beispiel wird ein Compilerfehler aufgrund des Versuchs verursacht, Double- und decimal-Variablen hinzuzufügen.The following example causes a compiler error by trying to add double and decimal variables.

decimal dec = 0m;
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:The result is the following error:

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

In diesem Beispiel werden decimal und int in demselben Ausdruck verwendet.In this example, a decimal and an int are mixed in the same expression. Das Ergebnis wird als decimal-Typ ausgewertet.The result evaluates to the decimal type.

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

BeispielExample

In diesem Beispiel wird die Ausgabe mit der Währungsformatzeichenfolge formatiert.In this example, the output is formatted by using the currency format string. Beachten Sie, dass x gerundet wird, da mehr Dezimalstellen als im Format $0.99 vorhanden sind.Notice that x is rounded because the decimal places exceed $0.99. Die Variable y, die die maximale Anzahl exakter Stellen darstellt, wird genau im richtigen Format angezeigt.The variable y, which represents the maximum exact digits, is displayed exactly in the correct format.

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#-SprachspezifikationC# language specification

Weitere Informationen erhalten Sie unter C#-Sprachspezifikation.For more information, see the C# Language Specification. Die Sprachspezifikation ist die verbindliche Quelle für die Syntax und Verwendung von C#.The language specification is the definitive source for C# syntax and usage.

Siehe auchSee also

Decimal
C#-ReferenzC# Reference
C#-ProgrammierhandbuchC# Programming Guide
C#-SchlüsselwörterC# Keywords
Tabelle ganzzahliger TypenIntegral Types Table
Tabelle integrierter TypenBuilt-In Types Table
Tabelle für implizite numerische KonvertierungenImplicit Numeric Conversions Table
Tabelle für explizite numerische KonvertierungenExplicit Numeric Conversions Table
Standardmäßige ZahlenformatzeichenfolgenStandard Numeric Format Strings