decimal (C# リファレンス)decimal (C# Reference)

decimal キーワードは、128 ビットのデータ型を示します。The decimal keyword indicates a 128-bit data type. decimal 型は、他の浮動小数点型よりも有効桁数が多く、範囲が狭いので、財務や金融の計算に適しています。Compared to other floating-point types, the decimal type has more precision and a smaller range, which makes it appropriate for financial and monetary calculations. decimal 型の概算の範囲と有効桁数は、次のとおりです。The approximate range and precision for the decimal type are shown in the following table.

Type おおよその範囲Approximate Range 有効桁数Precision .NET 型.NET type
decimal ±1.0 x 10-28 から ±7.9228 x 1028±1.0 x 10-28 to ±7.9228 x 1028 有効桁数 28 ~ 2928-29 significant digits System.Decimal

decimal の既定値は 0m です。The default value of a decimal is 0m.


実数値リテラルを decimal として扱うには、サフィックス m または M を使用します。次に例を示します。If you want a numeric real literal to be treated as decimal, use the suffix m or M, for example:

decimal myMoney = 300.5m;

サフィックス m がない場合は double として扱われ、コンパイラ エラーになります。Without the suffix m, the number is treated as a double and generates a compiler error.


整数型は、暗黙的に decimal に変換され、結果は decimal になります。The integral types are implicitly converted to decimal and the result evaluates to decimal. したがって、サフィックスなしで整数リテラルを使用して 10 進変数を初期化できます。次に例を示します。Therefore you can initialize a decimal variable using an integer literal, without the suffix, as follows:

decimal myMoney = 300;

他の浮動小数点型と decimal 型の間に暗黙の型変換はありません。2 つの型の間で変換を実行するには、キャストを使用する必要があります。There is no implicit conversion between other floating-point types and the decimal type; therefore, a cast must be used to convert between these two types. 次に例を示します。For example:

decimal myMoney = 99.9m;
double x = (double)myMoney;
myMoney = (decimal)x;

decimal 型と数値の整数型を同じ式に混在させることもできます。You can also mix decimal and numeric integral types in the same expression. ただし、decimal 型と他の浮動小数点型をキャストなしで混在させると、コンパイル エラーになります。However, mixing decimal and other floating-point types without a cast causes a compilation error.

暗黙的な数値変換の詳細については、「暗黙的な数値変換の一覧表」を参照してください。For more information about implicit numeric conversions, see Implicit Numeric Conversions Table.

明示的な数値変換の詳細については、「明示的な数値変換の一覧表」を参照してください。For more information about explicit numeric conversions, see Explicit Numeric Conversions Table.

10 進出力の書式指定Formatting decimal output

結果の書式を指定するには、String.Format メソッドを使用するか、Console.Write を呼び出す String.Format() メソッドを使用します。You can format the results by using the String.Format method, or through the Console.Write method, which calls String.Format(). 通貨書式を指定するには、この記事の 2 番目の例に示されているように、標準の通貨の書式指定文字列である "C" または "c" を使用します。The currency format is specified by using the standard currency format string "C" or "c," as shown in the second example later in this article. String.Format メソッドの詳細については、String.Format を参照してください。For more information about the String.Format method, see String.Format.


次の例では、double の変数と decimal の変数を加算しようとして、コンパイラ エラーが発生します。The following example causes a compiler error by trying to add double and decimal variables.

decimal dec = 0m;
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);

実行の結果、次のエラーが生成されます。The result is the following error:

Operator '+' cannot be applied to operands of type 'double' and 'decimal'

この例では、同じ式に decimalint が混在しています。In this example, a decimal and an int are mixed in the same expression. 結果は decimal 型になります。The result evaluates to the decimal type.

public class TestDecimal
    static void Main()
        decimal d = 9.1m;
        int y = 3;
        Console.WriteLine(d + y);   // Result converted to decimal
// Output: 12.1


ここでは、通貨の書式指定文字列を使用して、出力の書式を指定する例を示します。In this example, the output is formatted by using the currency format string. 小数点以下の桁数が $0.99 を超えるため、x を丸めている点に注意してください。Notice that x is rounded because the decimal places exceed $0.99. 変数 y は最大固定桁数を表し、正しい書式で正確に表示されます。The variable y, which represents the maximum exact digits, is displayed exactly in the correct format.

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# language specification

詳細については、「C# 言語の仕様」を参照してください。For more information, see the C# Language Specification. 言語仕様は、C# の構文と使用法に関する信頼性のある情報源です。The language specification is the definitive source for C# syntax and usage.

関連項目See also