Decimal 構造体

10 進数を表します。

この型のすべてのメンバの一覧については、Decimal メンバ を参照してください。

System.Object
   System.ValueType
      System.Decimal

<Serializable>
Public Structure Decimal   Implements IFormattable, IComparable, IConvertible
[C#]
[Serializable]
public struct Decimal : IFormattable, IComparable, IConvertible
[C++]
[Serializable]
public __value struct Decimal : public IFormattable, IComparable,   IConvertible

[JScript] JScript では、.NET Framework の構造体を利用することができます。ただし、独自に定義することはできません。

スレッドセーフ

この型の public static (Visual Basicでは Shared) のすべてのメンバは、マルチスレッド操作で安全に使用できます。インスタンスのメンバの場合は、スレッドセーフであるとは限りません。

解説

Decimal 値型は、正の 79,228,162,514,264,337,593,543,950,335 から負の 79,228,162,514,264,337,593,543,950,335 までの範囲の 10 進数を表します。Decimal 値型は、多数の有効な整数桁と小数桁を必要とし、丸め誤差を使用しない財務計算に適しています。

10 進数は、整数部とオプションの小数部から成る符号付き固定小数点値です。整数部と小数部は、小数点記号で区切られた 0 から 9 までの一連の数字から構成されます。

Decimal のインスタンスのバイナリ形式は、1 ビットの符号、96 ビットの整数、および 96 ビットの整数値を除算し、小数部を指定するために使用するスケール ファクタから構成されます。スケール ファクタは黙示的に数値 10 になり、0 から 28 の範囲の指数で累乗されます。

このため、Decimal 値のバイナリ表現は、((-296 ~ 2 96)/ 10 (0 to 28)) の形式です。ここで、-2 96MinValue に等しく、296MaxValue に等しい値です。

この型は、Decimal 値を型 CharSByteInt16Int32Int64ByteUInt16UInt32 、および UInt64 に変換したり、その逆方向に変換するメソッドを提供します。他の型から Decimal への変換は、情報が失われたり例外がスローされることがない拡大変換です。

Decimal から他の型への変換は、Decimal 値が 0 方向の近似整数値に丸められる縮小変換です。変換結果を変換先の型で表現できない場合は、 OverflowException がスローされます。

この型は、Decimal 値を Single および Double に変換したり、その逆方向に変換するメソッドを提供します。Decimal から Single または Double への変換は縮小変換であるため、精度の情報が失われる可能性がありますが、変換後の値の大きさに関する情報が失われることはありません。この変換では例外はスローされません。

Single または Double から Decimal への変換では、変換結果を Decimal として表現できない場合は OverflowException がスローされます。

この型は、 IComparableIFormattable 、および IConvertible インターフェイスを実装します。この型の明示的な IConvertible インターフェイス メンバの実装の代わりに、 Convert クラスを使用します。

使用例

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

[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 __gc class PiggyBank {
protected:
    Decimal MyFortune;

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

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

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

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

    System::String* ToString() {
        return String::Concat(MyFortune.ToString("C"),S" in piggy bank");
    }
};

}

using namespace Snippets;

void main (void) {
PiggyBank* pb = new PiggyBank();

for(Int32 i=0; i<378; i++) {
    pb->AddPenny();
}

Console::WriteLine(pb);
}

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

必要条件

名前空間: System

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ, .NET Compact Framework - Windows CE .NET

アセンブリ: Mscorlib (Mscorlib.dll 内)

参照

Decimal メンバ | System 名前空間 | SByte | Int16 | Int32 | Int64 | Byte | UInt16 | UInt32 | UInt64 | Single | Double | Char