Decimal 结构

表示十进制数。

**命名空间:**System
**程序集:**mscorlib(在 mscorlib.dll 中)

语法

声明
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Structure Decimal
    Implements IFormattable, IComparable, IConvertible, IComparable(Of Decimal), _
    IEquatable(Of Decimal)
用法
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 支持使用结构,但不支持进行新的声明。

备注

Decimal 值类型表示从正 79,228,162,514,264,337,593,543,950,335 到负 79,228,162,514,264,337,593,543,950,335 之间的十进制数。Decimal 值类型适用于要求使用大量有效的整数及小数位数并且没有舍入错误的财务计算。

十进制数是由符号、数值和比例因子组成的浮点值,数值的每一位的范围都是 0 到 9,比例因子指示分隔数值的整数和小数部分的浮点小数点的位置。

Decimal 值的二进制表示形式由 1 位符号、96 位整数以及比例因子组成,比例因子用作 96 位整数的除数并指定整数的哪一部分为小数。比例因子隐式地定为数字 10 的幂,指数范围从 0 到 28。因此,Decimal 值的二进制表示形式为:((-296 到 296) / 10(0 到 28)),其中 -296-1 等于 MinValue,而 296-1 等于 MaxValue

比例因子还保留 Decimal 数字中的所有尾随零。在算术或比较运算中,尾随零并不影响 Decimal 数字的值。但是,如果应用了正确的格式字符串,则可由 ToString 方法显示尾随零。

有关转换的注意事项

此类型提供将 Decimal 值转换为 CharSByteInt16Int32Int64ByteUInt16UInt32UInt64 类型及其反向转换的方法。从其他类型到 Decimal 的转换属于扩大转换,不会丢失信息或引发异常。

Decimal 到其他类型的转换属于收缩转换,会将 Decimal 值向零舍入为最接近的整数值。如果转换结果无法以目标类型表示,则引发 OverflowException

此类型提供将 Decimal 值转换为 SingleDouble 的方法及其反向转换的方法。从 DecimalSingleDouble 的转换属于收缩转换,可能会丢失精度,但不会丢失所转换值的数量大小信息。此类转换不会引发异常。

如果从 SingleDoubleDecimal 的转换的结果无法表示为 Decimal,则将引发 OverflowException

实现的接口

此类型实现 IComparableIComparableIFormattableIConvertible 接口。使用 Convert 类进行转换,而不是使用此类型的 IConvertible 显式接口成员实现。

示例

下面的代码示例演示 Decimal 的用法。

' 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";
    }
}

线程安全

此类型的任何公共静态(Visual Basic 中的 Shared)成员都是线程安全的,但不保证所有实例成员都是线程安全的。

平台

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

.NET Framework 并不是对每个平台的所有版本都提供支持。有关受支持版本的列表,请参见系统要求

版本信息

.NET Framework

受以下版本支持:2.0、1.1、1.0

.NET Compact Framework

受以下版本支持:2.0、1.0

请参见

参考

Decimal 成员
System 命名空间
SByte
Int16
Int32
Int64
Byte 结构
UInt16
UInt32
UInt64
Single
Double
Char 结构