浮動小数点数値型 (C# リファレンス)
"浮動小数点数値型" は実数を表します。 浮動小数点数値型は、値の型です。 また、単純型でもあり、リテラルを使用して初期化することができます。 すべての浮動小数点数値型は、算術、比較、および等値演算子をサポートしています。
浮動小数点型の特性
C# では、次の定義済みの浮動小数点型がサポートされています。
C# 型/キーワード | おおよその範囲 | 有効桁数 | サイズ | .NET 型 |
---|---|---|---|---|
float |
±1.5 x 10−45 から ±3.4 x 1038 | ~6 ~9 桁 | 4 バイト | System.Single |
double |
±5.0 × 10−324 - ±1.7 × 10308 | ~15-17 桁 | 8 バイト | System.Double |
decimal |
±1.0 x 10-28 から ±7.9228 x 1028 | 28 から 29 桁の数字 | 16 バイト | System.Decimal |
上の表の左端の列にある各 C# 型/キーワードは、対応する .NET 型の別名です。 これらは交換可能です。 たとえば、次の宣言では、同じ型の変数が宣言されています。
double a = 12.3;
System.Double b = 12.3;
各浮動小数点型の既定値はゼロ 0
です。 各浮動小数点型には、その型の最小および最大有限値を指定する MinValue
および MaxValue
定数があります。 float
および double
型では、数字ではない値や無限値を表す定数も提供されています。 たとえば、double
型では、定数 Double.NaN、Double.NegativeInfinity、Double.PositiveInfinity が提供されています。
decimal
型は、必要な精度が小数点の右側の桁数によって決まる場合に適しています。 このような数値は、財務アプリケーションで金額 ($1.00 など) や金利 (2.625% など) などによく使用されます。 1 つの 10 進数字だけで表される数値でさえも、decimal
型を使用するとより正確に処理されます。たとえば、0.1 は decimal
インスタンスでは正確に表すことができますが、0.1 が正確に表される double
または float
のインスタンスは存在しません。 このような数値型の違いにより、10 進データに double
または float
を使用すると、算術計算で予期しない丸めエラーが発生する可能性があります。 精度を保証するよりパフォーマンスを最適化する方が重要な場合は、decimal
ではなく double
を使用することができます。 ただし、大量の計算処理が必要なアプリケーションでもない限り、パフォーマンスの違いに気付くことはありません。 decimal
を避ける理由としてもう 1 つ考えられるのは、必要な記憶域を最小限に抑えることです。 たとえば、データ セットが非常に大きい場合は 4 バイトと 16 バイトの差が積み重なって意味を持つようになるため、ML.NET では float
が使用されています。 詳細については、「System.Decimal」を参照してください。
整数型と float
および double
型を 1 つの式の中で混在させることができます。 この場合、整数型は、浮動小数点型の 1 つに暗黙的に変換されます。また、必要に応じて、float
型は double
に暗黙的に変換されます。 この式は、次のように評価されます。
- 式に
double
型がある場合、リレーショナル比較と等価比較で、式はdouble
、またはbool
に評価されます。 - 式に
double
型がない場合、リレーショナル比較と等価比較で、式はfloat
、またはbool
に評価されます。
また、整数型と decimal
型を 1 つの式の中で混在させることもできます。 この場合、整数型は decimal
型に暗黙的に変換され、リレーショナル比較と等価比較で、式は decimal
、または bool
に評価されます。
decimal
型と float
および double
型を 1 つの式の中で混在させることはできません。 この場合、算術演算、比較演算、または等値演算を実行するには、次の例に示すように、decimal
型との間でオペランドを明示的に変換する必要があります。
double a = 1.0;
decimal b = 2.1m;
Console.WriteLine(a + (double)b);
Console.WriteLine((decimal)a + b);
浮動小数点値の書式指定には、標準の数値書式指定文字列またはカスタムの数値書式指定文字列のいずれかを使用できます。
実数リテラル
実数リテラルの型は、サフィックスによって次のように決まります。
- サフィックスがない、または
d
またはD
のリテラルはdouble
型です - サフィックスが
f
またはF
のリテラルはfloat
型です - サフィックスが
m
またはM
のリテラルはdecimal
型です
次のコードは、それぞれの例を示しています。
double d = 3D;
d = 4d;
d = 3.934_001;
float f = 3_000.5F;
f = 5.4f;
decimal myMoney = 3_000.5m;
myMoney = 400.75M;
前の例では、''桁区切り記号'' としての _
の使用も示しています。 数字区切り記号は、あらゆる種類の数値リテラルで使用できます。
次の例に示すように、指数表記を使用して、実数リテラルの指数部を指定することもできます。
double d = 0.42e2;
Console.WriteLine(d); // output 42
float f = 134.45E-2f;
Console.WriteLine(f); // output: 1.3445
decimal m = 1.5E6m;
Console.WriteLine(m); // output: 1500000
変換
浮動小数点数値型の間には、float
から double
に対する暗黙的な変換が 1 つだけあります。 ただし、明示的なキャストを使用して、任意の浮動小数点型を他の浮動小数点型に変換することはできます。 詳細については、「組み込みの数値変換」に関するページを参照してください。
C# 言語仕様
詳細については、「C# 言語仕様」の次のセクションを参照してください。
関連項目
.NET