decimal (C# リファレンス)

decimal キーワードは、128 ビットのデータ型を示します。decimal 型は、浮動小数点型よりも有効桁数が多く、範囲が狭いので、財務や金融の計算に適しています。decimal 型の概算の範囲と有効桁数は、次のとおりです。

おおよその範囲

有効桁数

.NET Framework 型

decimal

(-7.9 x 1028 ~ 7.9 x 1028) / (100 ~ 28)

有効桁数 28 ~ 29

System.Decimal

リテラル

実数値リテラルを 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# の構文と使用法に関する信頼性のある情報源です。

参照

関連項目

C# のキーワード

整数型の一覧表 (C# リファレンス)

組み込み型の一覧表 (C# リファレンス)

暗黙的な数値変換の一覧表 (C# リファレンス)

明示的な数値変換の一覧表 (C# リファレンス)

Decimal

概念

C# プログラミング ガイド

標準の数値書式指定文字列

その他の技術情報

C# リファレンス