Utilities.getDistance(uni, enemyuni) <= uni.getAttackRange()
Utilities.getDistance返回雙和getAttackRange返回INT。上面的代碼是if語句的一部分,它需要是真實的。那麼比較是否有效?在java中比較double和int是否有效?
感謝
Utilities.getDistance(uni, enemyuni) <= uni.getAttackRange()
Utilities.getDistance返回雙和getAttackRange返回INT。上面的代碼是if語句的一部分,它需要是真實的。那麼比較是否有效?在java中比較double和int是否有效?
感謝
是的,它是有效的 - 這將推動int
到double
在進行比較之前。
請參閱JLS section 15.20.1 (Numerical Comparison Operators)鏈接到JLS section 5.6.2 (Binary Numeric Promotion)。
從後者:
加寬原語轉換(§5.1.2)被施加到轉換的任一個或由下面的規則中指定的兩個操作數:
如果操作數是鍵入double,另一個轉換爲double。
...
這應該是罰款。 在浮點運算/比較中,如果一個參數浮動/雙重然後另一個是int也被提升爲相同。
馬上就好。
Java將簡單地返回數值的真等於:上述
int n = 10;
double f = 10.0;
System.out.println(f==n);
的代碼打印真。
當執行具有兩種不同數值類型操作(包括比較),Java將執行隱式擴大轉換。這意味着,當您將double
與int
進行比較時,int
將轉換爲double
,以便Java可以將這些值作爲兩個double
s進行比較。所以簡短的回答是肯定的,比較一個int和一個double是有效的,但有一個警告。
的問題是,你不應該使用,因爲精度可能出現的錯誤==
,<=
,或>=
運營商平等比較兩個浮PIONT值。此外,您需要小心雙倍可以採用的特殊值:NaN
,POSITIVE_INFINITY
和NEGATIVE_INFINITY
。我強烈建議您在比較double
時進行一些研究並瞭解這些問題。
有趣的是這是我的教授代碼。但是,我會調查這個問題現在 – Crone
@Crone對於一個學校任務,你可能可以忽略這些邊緣案例,但你仍然應該知道它們。選擇忽略它們比完全無知更可取。 –
我看不出有什麼問題,比較一個'double'與'<=' or '> ='對'int'。只有確切的平等可能是有問題的。 –
是的,它是絕對有效的比較int數據類型和數據類型雙..
int i =10;
double j= 10.0;
if (i==j)
{
System.out.println("IT IS TRUE");
}
你嘗試了嗎?它有用嗎? –
我如何測試它是否有效。編譯器接受它,但我不知道實際的數字值是否確實被比較。 – Crone
你試過了嗎?在java代碼中進行簡單的測試就足夠了。檢查我的答案相同 –