質問

他のブルース・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

doublesは同様floatsことができませんか?

事前のおかげで。

役に立ちましたか?

解決

はい、いますが、そうでない場合は、double型として扱われ、彼らは浮動小数点数であることを指定する必要があります:

z.b = 2.2f

番号の末尾の「F」はフロートの代わりに、二重になります。

Javaが自動的にfloatにダブルを狭めることはありません。

他のヒント

いいえ、山車が自動的にアップキャスト倍になることができますが、ダブルスは、より大きな範囲を持っているので、ダブルスは明示的なキャストなしの山車になることはありません。

フロート範囲が1.40129846432481707e-45する3.40282346638528860e+38される

二重の範囲が4.94065645841246544e-324d1.79769313486231570e+308dすることです。

あなたはそれ以外の場合は番号(例えば「4.3」)の後にFを追加することにより、doubleを指定しない限り、デフォルトでは、Javaはfloatとして小数(例えば「4.3f」)を扱います。

あなたは両方のラインで同じ問題を抱えています。まず、小数リテラルは、コンパイラによってdoubleとして解釈されます。その後、型bである、floatに割り当てることを試みます。 doubleは64ビットであり、floatは32ビットであるため(参照 Javaのプリミティブのドキュメントの)、Javaはあなたにfloatdouble内に収まることができないことを示すエラーが発生します。解決策は、あなたの進リテラルにFを追加することです。

あなたはfloatの64以内doubleの32ビットに合うことができるので、大丈夫だろうこと、(すなわちfloatdoubleを割り当てる)反対をやろうとした場合。

floatを使用しないでください。そこにそれを使用するための良い理由はほとんど決してありませんし、10年以上にわたりされていません。ただ、ダブル使用します。

can't doubles be floats as well?

はありません。各値または変数が1つだけの型を持っている(ダブル、フロート、int型、長い、など...)。あなたが起こるまさに Java言語仕様の状態別の型の変数に1型の値を代入してみてください。一般的に、「大きな」タイプを「小さい」値の割り当てが許可されていると暗黙のうちに行われますが、ターゲット・タイプが原点型のすべての値を保持するにはあまりにも「小」であるため、情報が失われる可能性の割り当てはによって許可されていませんコンパイラ、具体的な値は、ターゲットの型に収まらない場合でもます。

コンパイラはfloat型の変数にdouble値を(リテラルが暗黙のうちにある)割り当てることの情報を失う可能性があると文句を言いだからこそ、あなたは、または明示的にキャストすることによりいずれかの値がフロートを作ることによって、それをなだめるために必要があります。

これらは、暗黙のうちに技術的な理由のためにintに「広がり」されているため、しばしば混乱を引き起こし

一つの領域は、計算です。あなたは2つのショートパンツを掛けると短いに結果を代入しようとした場合、計算の結果はint型であるため、だから、コンパイラが文句を言うでしょう。

フロート範囲は、二重そうフロートは簡単に二重に表現することができるよりも低いが、我々は我々が正確なデータを失うことになる大会

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top