36
Utilities.getDistance(uni, enemyuni) <= uni.getAttackRange()

Utilities.getDistance は double を返し、getAttackRange は int を返します。上記のコードは if ステートメントの一部であり、true である必要があります。それで、比較は有効ですか?

ありがとう

4

6 に答える 6

73

はい、有効です。比較を実行する前にintを aに昇格させます。double

JLS セクション 5.6.2 (Binary Numeric Promotion)にリンクしているJLS セクション 15.20.1 (数値比較演算子)を参照してください。

後者から:

拡張プリミティブ変換 (§5.1.2) は、次の規則で指定されているように、一方または両方のオペランドを変換するために適用されます。

  • いずれかのオペランドが double 型の場合、もう一方は double に変換されます。

  • ...

于 2012-11-08T20:28:42.200 に答える
7

2 つの異なる数値型で演算 (比較を含む) を実行する場合、Java は暗黙的な拡大変換を実行します。これは、 adoubleと anを比較すると、 Java が値を 2 つの として比較できるようにintintが a に変換されることを意味します。int と double を比較することは有効ですが、注意が必要です。doubledouble

問題は、精度に誤差が生じる可能性があるため==、 、<=、または演算子を使用して 2 つの浮動小数点値を等しいかどうか比較してはならないことです。>=また、double が取ることができる特別な値について注意する必要があります: NaNPOSITIVE_INFINITY、およびNEGATIVE_INFINITY. sを比較する際には、調査を行い、これらの問題について学ぶことを強くお勧めしますdouble

于 2012-11-08T20:32:17.600 に答える
2

これで問題ないはずです。浮動小数点演算/比較では、1 つの引数が float/double である場合、 intである他の引数も同じに昇格されます。

于 2012-11-08T20:29:28.253 に答える
0

大丈夫でしょう。

Java は、数値が等しい場合に true を返すだけです。

    int n = 10;
    double f = 10.0;
    System.out.println(f==n);

上記のコードは true を出力します。

于 2012-11-08T20:29:44.327 に答える