2012-11-08 13 views
21
Utilities.getDistance(uni, enemyuni) <= uni.getAttackRange() 

Utilities.getDistance restituisce double e getAttackRange restituisce int. Il codice precedente fa parte di un'istruzione if e deve essere vero. Quindi il confronto è valido?È valido confrontare un doppio con un int in java?

Grazie

+0

hai provato esso? Ha funzionato? –

+0

Come posso verificare se è valido. Il compilatore lo accetta ma non posso sapere se i valori numerici effettivi sono effettivamente confrontati. – Crone

+1

Hai provato da solo ?? Un semplice test nel codice java potrebbe essere sufficiente.Controlla la mia risposta per lo stesso –

risposta

2

Questo dovrebbe andare bene. In operazioni/confronti in virgola mobile, se un argomento è mobile/double quindi viene promosso anche uno altro int.

0

Sarà ok.

Java restituirà semplicemente vero per il valore numerico è uguale:

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

Il codice di cui sopra stampa vera.

+1

È necessario prestare attenzione (e in genere evitare anche) il confronto dei valori in virgola mobile con l'operatore' == '. –

+0

E con cosa vuoi confrontare questi 2 valori? – Flawyte

+0

Tutti i 'int's sono esattamente rappresentabili come' double'. –

5

Quando si eseguono operazioni (compresi i confronti) con due diversi tipi numerici, Java eseguirà una conversione di ampliamento implicita. Ciò significa che quando si confronta un double con un int, lo int viene convertito in un double in modo che Java possa quindi confrontare i valori come due double s. Quindi la risposta breve è sì, il confronto tra int e double è valido, con un avvertimento.

Il problema è che che non si deve confrontare due valori floating-piont per l'uguaglianza utilizzando ==, <=, o >= operatori a causa di possibili errori di precisione. Inoltre, è necessario fare attenzione ai valori speciali che può richiedere un doppio: NaN, POSITIVE_INFINITY e NEGATIVE_INFINITY. Suggerisco caldamente di fare qualche ricerca e di conoscere questi problemi quando si confrontano i double s.

+0

La cosa divertente è che questo è il codice dei miei professori. Ma io indagherò sull'argomento ora – Crone

+0

@Crone Per un incarico scolastico, probabilmente puoi ignorare questi casi limite, ma dovresti ancora saperli. Scegliere di ignorarli è preferibilmente della completa ignoranza. –

+0

Non vedo nulla di sbagliato nel confrontare un 'double' con' <=' or '> = 'contro un' int'. Solo l'esatta uguaglianza potrebbe essere discutibile. –

1

sì, è assolutamente valida confrontare int tipo di dati e il doppio tipo di dati ..

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