Javaの:ダブル浮動対
-
16-09-2019 - |
質問
他のブルース・Eckel氏の演習では、私が書いたコードは、別のクラスのメソッドと変化値をとります。ここに私のコードは次のとおりです。
class Big {
float b;
}
public class PassObject {
static void f(Letter y) {
y.c = 'z';
} //end f()
static void g(Big z) {
z.b = 2.2;
}
public static void main(String[] args ) {
Big t = new Big();
t.b = 5.6;
System.out.println("1: t.b : " + t.b);
g(x);
System.out.println("2: t.b: " + t.b);
} //end main
}//end class
これはというエラーを投げるの「精度損失の可能性を。」
PassObject.java:13: possible loss of precision
found: double
required : float z.b = 2.2
passobject.java:20: possible loss of precision
found : double
required : float t.b = 5.6
double
sは同様float
sことができませんか?
事前のおかげで。
解決
はい、いますが、そうでない場合は、double型として扱われ、彼らは浮動小数点数であることを指定する必要があります:
z.b = 2.2f
番号の末尾の「F」はフロートの代わりに、二重になります。
Javaが自動的にfloatにダブルを狭めることはありません。
他のヒント
いいえ、山車が自動的にアップキャスト倍になることができますが、ダブルスは、より大きな範囲を持っているので、ダブルスは明示的なキャストなしの山車になることはありません。
フロート範囲が1.40129846432481707e-45
する3.40282346638528860e+38
される
二重の範囲が4.94065645841246544e-324d
が1.79769313486231570e+308d
することです。
あなたはそれ以外の場合は番号(例えば「4.3
」)の後にFを追加することにより、double
を指定しない限り、デフォルトでは、Javaはfloat
として小数(例えば「4.3f
」)を扱います。
あなたは両方のラインで同じ問題を抱えています。まず、小数リテラルは、コンパイラによってdoubleとして解釈されます。その後、型b
である、float
に割り当てることを試みます。 double
は64ビットであり、float
は32ビットであるため(参照 Javaのプリミティブのドキュメントの)、Javaはあなたにfloat
がdouble
内に収まることができないことを示すエラーが発生します。解決策は、あなたの進リテラルにFを追加することです。
あなたはfloat
の64以内double
の32ビットに合うことができるので、大丈夫だろうこと、(すなわちfloat
にdouble
を割り当てる)反対をやろうとした場合。
floatを使用しないでください。そこにそれを使用するための良い理由はほとんど決してありませんし、10年以上にわたりされていません。ただ、ダブル使用します。
can't doubles be floats as well?
はありません。各値または変数が1つだけの型を持っている(ダブル、フロート、int型、長い、など...)。あなたが起こるまさに Java言語仕様の状態別の型の変数に1型の値を代入してみてください。一般的に、「大きな」タイプを「小さい」値の割り当てが許可されていると暗黙のうちに行われますが、ターゲット・タイプが原点型のすべての値を保持するにはあまりにも「小」であるため、情報が失われる可能性の割り当てはによって許可されていませんコンパイラ、具体的な値は、ターゲットの型に収まらない場合でもます。
コンパイラはfloat型の変数にdouble値を(リテラルが暗黙のうちにある)割り当てることの情報を失う可能性があると文句を言いだからこそ、あなたは、または明示的にキャストすることによりいずれかの値がフロートを作ることによって、それをなだめるために必要があります。
これらは、暗黙のうちに技術的な理由のためにintに「広がり」されているため、しばしば混乱を引き起こし一つの領域は、計算です。あなたは2つのショートパンツを掛けると短いに結果を代入しようとした場合、計算の結果はint型であるため、だから、コンパイラが文句を言うでしょう。
フロート範囲は、二重そうフロートは簡単に二重に表現することができるよりも低いが、我々は我々が正確なデータを失うことになる大会中に、その後フロート範囲外の値をとりましょうので、逆はできませんP>