Utilities.getDistance(uni, enemyuni) <= uni.getAttackRange()
Utilities.getDistance は double を返し、getAttackRange は int を返します。上記のコードは if ステートメントの一部であり、true である必要があります。それで、比較は有効ですか?
ありがとう
Utilities.getDistance(uni, enemyuni) <= uni.getAttackRange()
Utilities.getDistance は double を返し、getAttackRange は int を返します。上記のコードは if ステートメントの一部であり、true である必要があります。それで、比較は有効ですか?
ありがとう
はい、有効です。比較を実行する前にint
を aに昇格させます。double
JLS セクション 5.6.2 (Binary Numeric Promotion)にリンクしているJLS セクション 15.20.1 (数値比較演算子)を参照してください。
後者から:
拡張プリミティブ変換 (§5.1.2) は、次の規則で指定されているように、一方または両方のオペランドを変換するために適用されます。
いずれかのオペランドが double 型の場合、もう一方は double に変換されます。
...
2 つの異なる数値型で演算 (比較を含む) を実行する場合、Java は暗黙的な拡大変換を実行します。これは、 adouble
と anを比較すると、 Java が値を 2 つの として比較できるようにint
、int
が a に変換されることを意味します。int と double を比較することは有効ですが、注意が必要です。double
double
問題は、精度に誤差が生じる可能性があるため==
、 、<=
、または演算子を使用して 2 つの浮動小数点値を等しいかどうか比較してはならないことです。>=
また、double が取ることができる特別な値について注意する必要があります: NaN
、POSITIVE_INFINITY
、およびNEGATIVE_INFINITY
. sを比較する際には、調査を行い、これらの問題について学ぶことを強くお勧めしますdouble
。
これで問題ないはずです。浮動小数点演算/比較では、1 つの引数が float/double である場合、 intである他の引数も同じに昇格されます。
大丈夫でしょう。
Java は、数値が等しい場合に true を返すだけです。
int n = 10;
double f = 10.0;
System.out.println(f==n);
上記のコードは true を出力します。