decimal (C# リファレンス)
decimal キーワードは、128 ビットのデータ型を示します。decimal 型は、浮動小数点型よりも有効桁数が多く、範囲が狭いので、財務や金融の計算に適しています。decimal 型の概算の範囲と有効桁数は、次のとおりです。
型 |
おおよその範囲 |
有効桁数 |
.NET Framework 型 |
---|---|---|---|
decimal |
(-7.9 x 1028 ~ 7.9 x 1028) / (100 ~ 28) |
有効桁数 28 ~ 29 |
リテラル
実数値リテラルを decimal として扱うには、サフィックス m または M を使用します。次に例を示します。
decimal myMoney = 300.5m;
サフィックス m がない場合は double として扱われ、コンパイラ エラーになります。
変換
整数型は、暗黙的に decimal に変換され、結果は decimal になります。したがって、サフィックスなしで整数リテラルを使用して 10 進変数を初期化できます。次に例を示します。
decimal myMoney = 300;
浮動小数点型と decimal 型の間に暗黙の型変換はありません。2 つの型の間で変換を実行するには、キャストを使用する必要があります。次に例を示します。
decimal myMoney = 99.9m;
double x = (double)myMoney;
myMoney = (decimal)x;
decimal 型と数値の整数型を同じ式に混在させることもできます。ただし、decimal 型と浮動小数点型をキャストなしで混在させると、コンパイル エラーになります。
暗黙の数値変換の詳細については、「暗黙的な数値変換の一覧表 (C# リファレンス)」を参照してください。
明示的な数値変換の詳細については、「明示的な数値変換の一覧表 (C# リファレンス)」を参照してください。
10 進出力の書式指定
結果の書式を指定するには、String.Format メソッドを使用するか、String.Format() を呼び出す Console.Write メソッドを使用します。通貨書式を指定するには、この記事の 2 番目の例に示されているように、標準の通貨の書式指定文字列である "C" または "c" を使用します。String.Format メソッドの詳細については、String.Format を参照してください。
使用例
ここでは、同じ式に decimal と int が混在している例を示します。結果は decimal 型になります。
次の例は double と decimal の変数を追加しようとすると、コンパイラ エラーが発生します。
double dub = 9;
// The following line causes an error that reads "Operator '+' cannot be applied to
// operands of type 'double' and 'decimal'"
Console.WriteLine(dec + dub);
// You can fix the error by using explicit casting of either operand.
Console.WriteLine(dec + (decimal)dub);
Console.WriteLine((double)dec + dub);
実行の結果、次のエラーが生成されます。
Operator '+' cannot be applied to operands of type 'double' and 'decimal'
public class TestDecimal
{
static void Main()
{
decimal d = 9.1m;
int y = 3;
Console.WriteLine(d + y); // Result converted to decimal
}
}
// Output: 12.1
ここでは、通貨の書式指定文字列を使用して、出力の書式を指定する例を示します。小数点以下の桁数が $0.99 を超えるため、x を丸めている点に注意してください。変数 y は最大固定桁数を表し、正しい書式で正確に表示されます。
public class TestDecimalFormat
{
static void Main()
{
decimal x = 0.999m;
decimal y = 9999999999999999999999999999m;
Console.WriteLine("My amount = {0:C}", x);
Console.WriteLine("Your amount = {0:C}", y);
}
}
/* Output:
My amount = $1.00
Your amount = $9,999,999,999,999,999,999,999,999,999.00
*/
C# 言語仕様
詳細については、「C# 言語仕様」を参照してください。言語仕様は、C# の構文と使用法に関する信頼性のある情報源です。