Decimal-Struktur

Stellt eine Decimal-Zahl dar.

Namespace: System
Assembly: mscorlib (in mscorlib.dll)

Syntax

'Declaration
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Structure Decimal
    Implements IFormattable, IComparable, IConvertible, IComparable(Of Decimal), _
    IEquatable(Of Decimal)
'Usage
Dim instance As Decimal
[SerializableAttribute] 
[ComVisibleAttribute(true)] 
public struct Decimal : IFormattable, IComparable, IConvertible, 
    IComparable<decimal>, IEquatable<decimal>
[SerializableAttribute] 
[ComVisibleAttribute(true)] 
public value class Decimal : IFormattable, IComparable, IConvertible, 
    IComparable<Decimal>, IEquatable<Decimal>
/** @attribute SerializableAttribute() */ 
/** @attribute ComVisibleAttribute(true) */ 
public final class Decimal extends ValueType implements IFormattable, IComparable, 
    IConvertible, IComparable<Decimal>, IEquatable<Decimal>
JScript unterstützt die Verwendung von Strukturen, aber nicht die Deklaration von neuen Strukturen.

Hinweise

Der Decimal-Werttyp stellt Decimal-Zahlen im Bereich von -79.228.162.514.264.337.593.543.950.335 bis +79.228.162.514.264.337.593.543.950.335 dar. Der Decimal-Werttyp ist für finanzmathematische Berechnungen geeignet, bei denen zahlreiche signifikante Vor- und Nachkommastellen erforderlich sind und keine Rundungsfehler auftreten dürfen.

Eine Decimal-Zahl ist ein Gleitkommawert, der aus einem Vorzeichen, einem numerischen Wert mit Ziffern zwischen 0 (null) und 9 sowie einem Skalierungsfaktor besteht, der die Position eines die Vor- und Nachkommastellen des numerischen Werts trennenden Gleitdezimaltrennzeichens angibt.

Die binäre Darstellung eines Decimal-Werts besteht aus einem 1-Bit-Vorzeichen, einer 96-Bit-Ganzzahl und einem Skalierungsfaktor, der zum Dividieren der 96-Bit-Ganzzahl verwendet wird und angibt, welcher Teil ein Dezimalbruch ist. Der Skalierungsfaktor ist implizit die Zahl 10 mit einem Exponent zwischen 0 und 28. Daher verfügt die binäre Darstellung eines Decimal-Werts über die Form ((-296 bis 296) / 10(0 bis 28)), wobei -296-1 gleich MinValue und 296-1 gleich MaxValue ist.

Der Skalierungsfaktor behält außerdem alle nachfolgenden Nullen in einer Decimal-Zahl bei. Nachfolgenden Nullen haben keine Auswirkungen auf den Wert einer Decimal-Zahl bei Vergleichs- und Arithmetikoperationen. Nachfolgende Nullen können jedoch von der ToString-Methode angezeigt werden, wenn eine entsprechende Formatzeichenfolge angewendet wird.

Konvertierungsüberlegungen

Dieser Typ stellt Methoden bereit, die eine Konvertierung zwischen Decimal-Werten und den folgenden Typen durchführen: Char, SByte, Int16, Int32, Int64, Byte, UInt16, UInt32 und UInt64. Konvertierungen von anderen Typen in Decimal sind Erweiterungskonvertierungen, bei denen keine Informationen verloren gehen und keine Ausnahmen ausgelöst werden.

Konvertierungen von Decimal in andere Typen sind einschränkende Konvertierungen, die den Decimal-Wert in Richtung 0 (null) auf die nächste Ganzzahl runden. Wenn das Ergebnis der Konvertierung nicht im Zieltyp darstellbar ist, wird eine OverflowException ausgelöst.

Dieser Typ stellt Methoden bereit, die zwischen Decimal-Werten und Single sowie Double konvertieren. Konvertierungen von Decimal in Single oder Double sind einschränkende Konvertierungen, bei denen zwar ein Verlust an Genauigkeit, jedoch kein Verlust an Informationen über die Größe des konvertierten Werts auftreten kann. Die Konvertierung löst keine Ausnahme aus.

Konvertierungen von Single oder Double in Decimal lösen eine OverflowException aus, wenn das Ergebnis der Konvertierung nicht als Decimal darstellbar ist.

Implementierte Schnittstellen

Dieser Typ implementiert die Schnittstellen IComparable, IComparable, IFormattable und IConvertible. Verwenden Sie für Konvertierungen die Convert-Klasse anstelle der expliziten Implementierung der Schnittstellenmember von IConvertible für diesen Typ.

Beispiel

Im folgenden Codebeispiel wird die Verwendung des Decimal veranschaulicht.

' Keeping my fortune in Decimals to avoid the round-off errors.
Class PiggyBank
    Protected MyFortune As Decimal

    Public Sub AddPenny()
        MyFortune = [Decimal].Add(MyFortune, 0.01D)
    End Sub

    Public ReadOnly Property Capacity() As Decimal
        Get
            Return [Decimal].MaxValue
        End Get
    End Property

    Public ReadOnly Property Dollars() As Decimal
        Get
            Return [Decimal].Floor(MyFortune)
        End Get
    End Property

    Public ReadOnly Property Cents() As Decimal
        Get
            Return [Decimal].Subtract(MyFortune, [Decimal].Floor(MyFortune))
        End Get
    End Property

    Public Overrides Function ToString() As String
        Return MyFortune.ToString("C") + " in piggy bank"
    End Function
End Class
/// <summary>
/// Keeping my fortune in Decimals to avoid the round-off errors.
/// </summary>
class PiggyBank {
    protected decimal MyFortune;

    public void AddPenny() {
        MyFortune = Decimal.Add(MyFortune, .01m);
    }

    public decimal Capacity {
        get {
            return Decimal.MaxValue;
        }
    }

    public decimal Dollars {
        get {
            return Decimal.Floor(MyFortune);
        }
    }

    public decimal Cents {
        get {
            return Decimal.Subtract(MyFortune, Decimal.Floor(MyFortune));
        }
    }

    public override string ToString() {
        return MyFortune.ToString("C")+" in piggy bank";
    }
}
   /// <summary>
   /// Keeping my fortune in Decimals to avoid the round-off errors.
   /// </summary>
   public ref class PiggyBank
   {
   protected:
      Decimal MyFortune;

   public:
      void AddPenny()
      {
         MyFortune = System::Decimal::Add( MyFortune, Decimal(.01) );
      }

      System::Decimal Capacity()
      {
         return MyFortune.MaxValue;
      }

      Decimal Dollars()
      {
         return Decimal::Floor( MyFortune );
      }

      Decimal Cents()
      {
         return Decimal::Subtract( MyFortune, Decimal::Floor( MyFortune ) );
      }

      virtual System::String^ ToString() override
      {
         return MyFortune.ToString("C")+" in piggy bank";
      }
   };
}
/// <summary>
/// Keeping my fortune in Decimals to avoid the round-off errors.
/// </summary>
class PiggyBank
{
    protected System.Decimal myFortune;

    public void AddPenny()
    {
        myFortune = Decimal.Add(myFortune, System.Convert.ToDecimal(0.01));
    } //AddPenny

    /** @property 
     */
    public System.Decimal get_Capacity()
    {
        return Decimal.MaxValue;
    } //get_Capacity

    /** @property 
     */
    public System.Decimal get_Dollars()
    {
        return Decimal.Floor(myFortune);
    } //get_Dollars

    /** @property 
     */
    public System.Decimal get_Cents()
    {
        return Decimal.Subtract(myFortune, Decimal.Floor(myFortune));
    } //get_Cents

    public String ToString()
    {
        return myFortune.ToString("C") + " in piggy bank";
    } //ToString
} //PiggyBank
/// <summary>
/// Keeping my fortune in Decimals to avoid the round-off errors.
/// </summary>
class PiggyBank {
    protected var MyFortune : Decimal;

    public function AddPenny() {
        MyFortune = Decimal.Add(MyFortune, 0.01);
    }

    public function get Capacity() : Decimal {
            return Decimal.MaxValue;
    }

    public function get Dollars() : Decimal {
        return Decimal.Floor(MyFortune);
    }

    public function get Cents() : Decimal {
        return Decimal.Subtract(MyFortune, Decimal.Floor(MyFortune));
    }

    public function ToString() : String {
        return MyFortune.ToString("C")+" in piggy bank";
    }
}

Threadsicherheit

Alle öffentlichen statischen (Shared in Visual Basic) Member dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.

Plattformen

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile für Pocket PC, Windows Mobile für Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.

Versionsinformationen

.NET Framework

Unterstützt in: 2.0, 1.1, 1.0

.NET Compact Framework

Unterstützt in: 2.0, 1.0

Siehe auch

Referenz

Decimal-Member
System-Namespace
SByte
Int16
Int32
Int64
Byte-Struktur
UInt16
UInt32
UInt64
Single
Double
Char-Struktur