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 96 は MinValue に等しく、296 は MaxValue に等しい値です。
この型は、Decimal 値を型 Char 、 SByte 、 Int16 、 Int32 、 Int64 、 Byte 、 UInt16 、 UInt32 、および UInt64 に変換したり、その逆方向に変換するメソッドを提供します。他の型から Decimal への変換は、情報が失われたり例外がスローされることがない拡大変換です。
Decimal から他の型への変換は、Decimal 値が 0 方向の近似整数値に丸められる縮小変換です。変換結果を変換先の型で表現できない場合は、 OverflowException がスローされます。
この型は、Decimal 値を Single および Double に変換したり、その逆方向に変換するメソッドを提供します。Decimal から Single または Double への変換は縮小変換であるため、精度の情報が失われる可能性がありますが、変換後の値の大きさに関する情報が失われることはありません。この変換では例外はスローされません。
Single または Double から Decimal への変換では、変換結果を Decimal として表現できない場合は OverflowException がスローされます。
この型は、 IComparable 、 IFormattable 、および 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