f
なぜ変数に入れなければならなかったのですf
か?
float f =5.67f;
double
変数はそれよりも多くの 10 進数を受け入れることができることは知っていますが、変数であると既に述べたのにfloat
、なぜそれを追加しなければならなかったのf
でしょうか?5.67
float
f
なぜ変数に入れなければならなかったのですf
か?
float f =5.67f;
double
変数はそれよりも多くの 10 進数を受け入れることができることは知っていますが、変数であると既に述べたのにfloat
、なぜそれを追加しなければならなかったのf
でしょうか?5.67
float
すでにフロート変数だと言ったとき
ご存知のように、コンパイラはそうしません。デフォルトでは が として解釈されるため、からdouble
への暗黙的な変換を試みます。float
5.67
double
あなたが書いたとき、コンパイラはそれが a であり、 a ではないことを知りませfloat f = 5.67;
ん。5.67
float
double
5.67
double
float
よりも精度が低いdouble
ため、暗黙的な変換を行うことができず、「型の不一致: double から float に変換できません」というエラーが発生します。
Java では、縮小プリミティブ変換( double
->などfloat
) は明示的にのみ適用できます。あなたが書くときfloat f = 5.67;
、変換が暗黙的に起こることを期待しているので、エラーが発生します。double
Java は、有効桁数に関係なく、すべての浮動小数点リテラルをその型として定義します。float
リテラルを指定する唯一の方法は、数値にf
orF
を追加することです。
記事 http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.htmlから
浮動小数点リテラル
浮動小数点リテラルは、文字 F または f で終わる場合、float 型です。それ以外の場合、その型は double であり、オプションで文字 D または d で終わることができます。
The floating point types (float and double) can also be expressed using E or e
(for scientific notation), F or f (32-bit float literal) and D or d (64-bit double literal;
this is the default and by convention is omitted).
double d1 = 123.4;
// same value as d1, but in scientific notation
double d2 = 1.234e2;
float f1 = 123.4f;
フロートとダブルの違い:
float : float データ型は、単精度 32 ビット IEEE 754 浮動小数点です。その値の範囲は、この説明の範囲を超えていますが、Java 言語仕様の浮動小数点型、形式、および値のセクションで指定されています。byte と short の推奨事項と同様に、浮動小数点数の大きな配列でメモリを節約する必要がある場合は、(double ではなく) float を使用します。このデータ型は、通貨などの正確な値には使用しないでください。そのためには、代わりに java.math.BigDecimal クラスを使用する必要があります。Numbers and Strings では、Java プラットフォームによって提供される BigDecimal およびその他の便利なクラスについて説明します。
double : double データ型は、倍精度の 64 ビット IEEE 754 浮動小数点です。その値の範囲は、この説明の範囲を超えていますが、Java 言語仕様の浮動小数点型、形式、および値のセクションで指定されています。10 進数値の場合、通常、このデータ型がデフォルトの選択です。前述のように、このデータ型は、通貨などの正確な値には使用しないでください。
値5.67
は倍精度 (Java 型double
) です。
値5.67f
は単精度 (Java 型float
) です。
したがってfloat f = 5.67;
、最初に倍精度値を作成し、次にそれを単精度変数に格納しようとします。
倍精度の値を単精度の変数に格納しようとすると、(潜在的に、そして通常は) 情報が失われるため、コンパイラは拒否します。
型キャストを使用できます。これは、値がリテラルでない場合に行うことです。
float f = (float)5.67;
ただし、この場合は、最初からリテラルを double ではなく float にする方が簡単です。
float f = 5.67f;
ここですでに回答されているように、5.67f は float リテラルの構文ですが、5.67 は double リテラルです。
float 値を double 変数に割り当てるには、明示的なキャストが必要です (そうしないと、「精度が失われる可能性があります」というコンパイル時エラーが発生します)。したがって、次のいずれかを記述する必要があります。
float f = 5.67f;
また:
float f = (float)5.67;
サフィックスは、値の解釈方法をコンパイラに指示します。デフォルトの動作であるため、コンパイラは 5.67 を double として扱います。f は、代わりに float として扱うようにコンパイラに指示します。
計算で変数を初期化できるためです。たとえば、double d = 5.4f / 2f です。