Struttura Decimal (System)

Cambia visualizzazione:
ScriptFree
Riferimento a .NET Framework
Struttura Decimal

Rappresenta un numero decimale.

Spazio dei nomi: System
Assembly: mscorlib (in mscorlib.dll)

Sintassi

Visual Basic - (Dichiarazione)
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Structure Decimal
	Implements IFormattable, IComparable, IConvertible, IComparable(Of Decimal), _
	IEquatable(Of Decimal)
Visual Basic (Utilizzo)
Dim instance As Decimal

C#
[SerializableAttribute] 
[ComVisibleAttribute(true)] 
public struct Decimal : IFormattable, IComparable, IConvertible, 
	IComparable<decimal>, IEquatable<decimal>
C++
[SerializableAttribute] 
[ComVisibleAttribute(true)] 
public value class Decimal : IFormattable, IComparable, IConvertible, 
	IComparable<Decimal>, IEquatable<Decimal>
J#
/** @attribute SerializableAttribute() */ 
/** @attribute ComVisibleAttribute(true) */ 
public final class Decimal extends ValueType implements IFormattable, IComparable, 
	IConvertible, IComparable<Decimal>, IEquatable<Decimal>
JScript
JScript supporta l'utilizzo di strutture ma non la dichiarazione di nuove.
Note

Il tipo di valore Decimal rappresenta numeri decimali compresi tra i valori positivi 79,228,162,514,264,337,593,543,950,335 e i valori negativi 79,228,162,514,264,337,593,543,950,335. Il tipo di valore Decimal è appropriato per i calcoli finanziari che richiedono grandi numeri di cifre integrali e frazionarie significative e nessun errore di arrotondamento.

Un numero decimale è un valore in virgola mobile costituito da un segno, un valore numerico dove ogni cifra nel valore è compresa tra 0 e 9 e un fattore di scala indicante la posizione di una virgola decimale mobile, che separa le parti intere da quelle frazionarie del valore numerico.

La rappresentazione binaria di un valore Decimal consiste di un segno di 1 bit, un numero integer a 96 bit e un fattore di scala utilizzato per dividere il numero integer a 96 bit e specificare quale parte sia una frazione decimale. Il fattore di scala è costituito implicitamente dal numero 10, elevato a un esponente compreso tra 0 e 28, di conseguenza, la rappresentazione binaria di un valore Decimal corrisponde al form, ((-296 a 296) / 10(0 a 28)), dove -296-1 è uguale a MinValue e 296-1 è uguale a MaxValue.

Il fattore di scala conserva anche tutti gli zero finali di un numero Decimal. Gli zero finali non influenzano il valore di un numero Decimal in operazioni aritmetiche o di confronto. Tuttavia, gli zero finali possono essere rivelati dal metodo ToString se viene applicato un formato di stringa appropriato.

Considerazioni sulla conversione

Il presente tipo fornisce metodi per convertire valori Decimal nel e dal tipo Char, SByte, Int16, Int32, Int64, Byte, UInt16, UInt32 e UInt64. Le conversioni da altri tipi in Decimal sono conversioni di ampliamento, che non perdono dati né generano eccezioni.

Le conversioni da Decimal in altri tipi sono conversioni di restrizione che arrotondano il valore Decimal al valore integer più vicino che tende allo zero. Se non è possibile rappresentare il risultato della conversione nel tipo di destinazione, verrà generata una OverflowException.

Questo tipo fornisce metodi per convertire valori Decimal nel e dal tipo Single e Double. Le conversioni da Decimal a Single o Double sono conversioni di restrizione che potrebbero perdere precisione ma non le informazioni relative alla grandezza del valore convertito. La conversione non genererà un'eccezione.

Le conversioni da Single o Double a Decimal genereranno una OverflowException se non è possibile rappresentare il risultato della conversione come Decimal.

Interfacce implementate

Questo tipo implementa le interfacce IComparable, IComparable, IFormattable e IConvertible. Utilizzare la classe Convert per le conversioni anziché l'implementazione del membro esplicito dell'interfaccia IConvertible di questo tipo.

Esempio

Nell'esempio di codice riportato di seguito viene illustrato l'utilizzo di Decimal.

Visual Basic
' 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

C#
/// <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";
    }
}

C++
   /// <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";
      }
   };
}

J#
/// <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

JScript
/// <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";
    }
}

Codice thread safe

I membri statici pubblici (Shared in Visual Basic) di questo tipo sono validi per le operazioni multithreading. I membri di istanza non sono garantiti come thread safe.
Piattaforme

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

.NET Framework non supporta tutte le versioni di ciascuna piattaforma. Per un elenco delle versioni supportate, vedere Requisiti di sistema.

Informazioni sulla versione

.NET Framework

Supportato in: 2.0 1.1 1.0

.NET Compact Framework

Supportato in: 2.0 1.0
Vedere anche