2017-09-04 5 views
6
ダブル

とIコードをオーバーロードこの方法を試し、私はエラーを得たフロートで示す「互換性のない型エラー」オーバーロードが、方法ではない

(二重、二重)

追加するため見つかりませ適切な方法ありません

コード:書面で

class Adder { 
    static float add(float a, float b) { 
     return a + b; 
    } 

    static int add(int a, int b) { 
     return a + b; 
    } 
} 

class TestOverloading1 { 
    public static void main(String[] args){ 
     System.out.println(Adder.add(11.5, 11.5)); 
     System.out.println(Adder.add(27, 21)); 
    } 
} 

、のparamsで 11.5f 、これはうまく動作します。

フロートとダブルの違いはherehereです。

Javaでは、デフォルトでパラメータが2倍のデータ型になっているのはなぜですか?そのようなバイアスの背後にある倍精度の精度は高いですか?

私は、デフォルトでは2倍になると認識しています。しかし、私はこれの背後にある理由は何かを知りたいですか?

Adder.add(11.5,11.5) 

をやっ

+0

を参照してください。なぜなら11.5はダブルですからです。次のように試すこともできます:new Float(11.5) – Stultuske

+2

@Stultuske 'new Float(11.5)'を使うことを提案するのは悪いアドバイスです。なぜ新しいラッパーオブジェクトを導入するのですか? –

+0

実際にアドバイスされたものではなく、浮動小数点が動作するかどうかをテストするより目に見える方法です – Stultuske

答えて

7

を宣言する。

doubleパラメータは、(doubleからfloatに鋳造データが失われる可能性があり、したがって、コンパイラが自動的にそのようなキャスティングを実行しないので)float引数を受け取る方法に許容されません。

一方、11.5ffloatリテラルなので、このようなリテラルをadd(float a,float b)メソッドに渡すことができます。

4

は、静的メソッドのパラメータ

static float add(float a,float b){return a+b;} 

に合わせdoesntのこと

double a = 11.5; 
double b = 11.5; 
Adder.add(a, b) 

と同じであるので、あなたがする必要があります にそれらのリテラルをキャスト浮動小数点:

Adder.add(11.5f, 11.5f); 

又は(任意サフィックスなしリテラル同様に整数型intである)(例えば11.5など)の任意のサフィックスなしリテラル浮動小数点の定義により型doubleであるフロートとして及びB

float a = 11.5; 
float b = 11.5; 
Adder.add(a, b) 
2

"11.5" Javaなしで何も考慮されていません。 次のようなものを使用できます。

System.out.println(Adder.add(new Float(11.5),new Float(11.5))); 
0

単なる仕様です。ちょうどintがJavaでデフォルト値0を持つ理由と同じです。

ダブル:ダブルデータ型は、倍精度64ビットIEEE 754 浮動小数点である

ダブル小数点値のデフォルトタイプです。値の範囲はこの の説明の範囲を超えていますが、Java言語仕様の浮動小数点型、書式、および の値セクションで指定されています。 小数値の場合、 このデータ型は通常デフォルトの選択です。上記のように、 このデータタイプは、正確な値のために使用されるべきではありません( 通貨など)。

出典:Javaではhttps://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

2

我々は11.5として進数を入力すると、それは、二重と考えられています。 floatは32ビットなのでdoubleは64ビットですが、変換が不可能なので、コンパイル時の例外が発生します。詳細については、Primitive Data Types

関連する問題