Utilities.getDistance(uni, enemyuni) <= uni.getAttackRange()
Utilities.getDistanceはdoubleを返し、getAttackRangeはintを返します。上記のコードはifステートメントの一部であり、trueである必要があります。比較は有効ですか?
ありがとう
はい、有効です-比較を実行する前にint
をdouble
に昇格させます。
JLSセクション15.20.1(数値比較演算子) を参照してください JLSセクション5.6.2(バイナリ数値プロモーション) .
後者から:
拡張プリミティブ変換(§5.1.2)は、次の規則で指定されているように、一方または両方のオペランドを変換するために適用されます。
いずれかのオペランドがdouble型の場合、もう一方はdoubleに変換されます。
...
2つの異なる数値タイプで操作(比較を含む)を実行する場合、Javaは暗黙的な拡張変換を実行します。つまり、double
とint
を比較すると、 int
はdouble
に変換されるため、Javaは値を2つのdouble
sとして値を比較できます。ダブルは有効ですが、注意が必要です。
問題は、==
、<=
、または>=
演算子を使用して、精度のエラーが発生する可能性があるため、2つの浮動ピオント値を比較しないことです。また、doubleが取ることができる特別な値に注意する必要があります:NaN
、POSITIVE_INFINITY
、およびNEGATIVE_INFINITY
。 double
sを比較する際に、これらの問題について調査して学ぶことを強くお勧めします。
これで問題ないはずです。 浮動小数点演算/比較では、1つの引数がfloat/doubleの場合その後intである他の引数も同じ値に昇格されます。
はい、それは有効であり、あなたのコードはグリッチなしで期待どおりに動作するはずですが、これはベストプラクティスではありません。
だから、これを行う正しい方法は、
Double.compare(val1,val2)==0
パラメーターが浮動小数点変数でない場合、それらは浮動小数点に昇格されます。
はい、int intデータ型とdoubleデータ型の比較は絶対に有効です。
int i =10;
double j= 10.0;
if (i==j)
{
System.out.println("IT IS TRUE");
}
大丈夫でしょう。
Javaは単純に数値が等しい場合にtrueを返します。
int n = 10;
double f = 10.0;
System.out.println(f==n);
上記のコードはtrueを出力します。