コンパイラは、数値リテラルを検出すると、数値、句読点、および接尾辞 (存在する場合) のサイズに基づいて型を選択し、その中の文字列をその型に変換します。これはすべて、コンパイラが数値をどう処理するかに関係なく行われます。これが完了すると、コンパイラは数値を独自の型として使用するか、別の型に明示的にキャストするか、または以下で定義されている 2 つのケースで別の型に暗黙的に変換することのみを許可します。
数値が任意の整数型 ( int
、long
など) として解釈される場合、コンパイラは数値を表現できる任意の整数型、および任意の 2 進または 10 進浮動小数点型を初期化するために使用できるようにします。数値がその型で正確に表現できるかどうか。
数値がSingle
[f
接尾辞で示される] 型である場合、コンパイラは、結果が の初期化に使用されたリテラルを正確に表すDouble
かどうかに関係なく、それを使用して を初期化することを許可します。Double
Single
Double
タイプ[小数点を含むがサフィックスなし] または[「D」サフィックスの直後にプラスまたはマイナスが続かない]タイプの数値リテラルは、数値Decimal
が正確に表現可能であっても、他の変数の初期化には使用できません。そうしないと、結果は問題の数値リテラルのターゲット型の最適な表現になります。
型Decimal
と他の浮動小数点型 (double
およびfloat
) との間の変換は、変換方法があまり正確ではないため、可能な限り避ける必要があることに注意してください。double
正確な表現が存在しない値は多数ありますが、値が値よりも密集Decimal
している広い数値範囲があります。a を変換すると、最も近い値、またはその数値と次に高い値または低い値との間にある値の少なくとも 1 つが選択されると予想されるかもしれませんが、通常の変換方法では必ずしもそうではありません。場合によっては、結果が大幅にずれることがあります。Decimal
double
double
Decimal
Decimal
double
に変換Double
するDecimal
必要がある場合は、おそらく何か間違ったことをしている可能性があります。Double
で利用できて で利用できない操作がいくつかありますがDecimal
、2 つの型の間で変換を行うという行為は、Decimal
最終的に得られる結果が何であれ、すべての計算が Double` で行われた場合よりも精度が低くなる傾向があることを意味します。