3

fなぜ変数に入れなければならなかったのですfか?

float f =5.67f;

double変数はそれよりも多くの 10 進数を受け入れることができることは知っていますが、変数であると既に述べたのにfloat 、なぜそれを追加しなければならなかったのfでしょうか?5.67float

4

8 に答える 8

5

すでにフロート変数だと言ったとき

ご存知のように、コンパイラはそうしません。デフォルトでは が として解釈されるため、からdoubleへの暗黙的な変換を試みます。float5.67double


あなたが書いたとき、コンパイラはそれが a であり、 a ではないこと知りませfloat f = 5.67;ん。5.67floatdouble5.67double

floatよりも精度が低いdoubleため、暗黙的な変換を行うことができず、「型の不一致: double から float に変換できません」というエラーが発生します。

于 2013-11-06T11:09:47.237 に答える
2

Java では、縮小プリミティブ変換( double->などfloat) は明示的にのみ適用できます。あなたが書くときfloat f = 5.67;、変換が暗黙的に起こることを期待しているので、エラーが発生します。doubleJava は、有効桁数に関係なく、すべての浮動小数点リテラルをその型として定義します。floatリテラルを指定する唯一の方法は、数値にforFを追加することです。

于 2013-11-06T11:14:37.553 に答える
2

記事 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 進数値の場合、通常、このデータ型がデフォルトの選択です。前述のように、このデータ型は、通貨などの正確な値には使用しないでください。

于 2013-11-06T11:19:29.783 に答える
0

5.67は倍精度 (Java 型double) です。

5.67fは単精度 (Java 型float) です。

したがってfloat f = 5.67;、最初に倍精度値を作成し、次にそれを単精度変数に格納しようとします。

倍精度の値を単精度の変数に格納しようとすると、(潜在的に、そして通常は) 情報が失われるため、コンパイラは拒否します。

型キャストを使用できます。これは、値がリテラルでない場合に行うことです。

float f = (float)5.67;

ただし、この場合は、最初からリテラルを double ではなく float にする方が簡単です。

float f = 5.67f;
于 2013-11-06T11:30:33.380 に答える
0

ここですでに回答されているように、5.67f は float リテラルの構文ですが、5.67 は double リテラルです。

float 値を double 変数に割り当てるには、明示的なキャストが必要です (そうしないと、「精度が失われる可能性があります」というコンパイル時エラーが発生します)。したがって、次のいずれかを記述する必要があります。

float f = 5.67f;

また:

float f = (float)5.67;
于 2013-11-06T11:15:21.523 に答える
0

サフィックスは、値の解釈方法をコンパイラに指示します。デフォルトの動作であるため、コンパイラは 5.67 を double として扱います。f は、代わりに float として扱うようにコンパイラに指示します。

于 2013-11-06T11:12:34.357 に答える
0

計算で変数を初期化できるためです。たとえば、double d = 5.4f / 2f です。

于 2013-11-06T11:12:49.953 に答える