web-dev-qa-db-ja.com

javaでdoubleとintを比較することは有効ですか?

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

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

ありがとう

27
Tasos

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

JLSセクション15.20.1(数値比較演算子) を参照してください JLSセクション5.6.2(バイナリ数値プロモーション) .

後者から:

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

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

  • ...

64
Jon Skeet

2つの異なる数値タイプで操作(比較を含む)を実行する場合、Javaは暗黙的な拡張変換を実行します。つまり、doubleintを比較すると、 intdoubleに変換されるため、Javaは値を2つのdoublesとして値を比較できます。ダブルは有効ですが、注意が必要です。

問題は、==<=、または>=演算子を使用して、精度のエラーが発生する可能性があるため、2つの浮動ピオント値を比較しないことです。また、doubleが取ることができる特別な値に注意する必要があります:NaNPOSITIVE_INFINITY、およびNEGATIVE_INFINITYdoublesを比較する際に、これらの問題について調査して学ぶことを強くお勧めします。

6
Code-Apprentice

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

2
Yogendra Singh

はい、それは有効であり、あなたのコードはグリッチなしで期待どおりに動作するはずですが、これはベストプラクティスではありません。

sonarQubeの主要なバグimg

sonarQubeの主要なバグの説明

だから、これを行う正しい方法は、

Double.compare(val1,val2)==0 

パラメーターが浮動小数点変数でない場合、それらは浮動小数点に昇格されます。

1
Karthik H

はい、int intデータ型とdoubleデータ型の比較は絶対に有効です。

int i =10;
double j= 10.0;
 if (i==j)
{
System.out.println("IT IS TRUE");
}
1
BRIJESH

大丈夫でしょう。

Javaは単純に数値が等しい場合にtrueを返します。

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

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

0
Fr_nkenstien