Perché Java è incoerente nel confronto tra -0.0 e +0.0? Qual è il metodo standard Java per confrontare i numeri con l'account -0/+ 0?Java: confronto di zeri positivi e negativi
ho incontrato questo particolare Bugaboo:
public class ZeroCompare {
public static void main(String[] args) {
if (0.0 == -0.0) {
System.out.println("== --> same");
} else {
System.out.println("== --> different");
}
if (new Double(0.0).equals(-0.0)) {
System.out.println("equals --> same");
} else {
System.out.println("equals --> different");
}
}
}
Esso stampa il seguente:
== --> same
equals --> different
Cosa non mi piace con forza il fatto che come si confrontano questi due valori influisce sul risultato e mi piacerebbe per una spiegazione.
primi di uguale all'interno letterali (-0.0) non è forse virgola mobile in doppia. e in secondo luogo il metodo equals confronta gli oggetti e per letterali diversi ci sono diversi oggetti wrapper. –
@amitmahajan È un doppio. Richiederebbe un 'f' o' F' alla fine per essere un letterale float. – Kayaman
A proposito, i numeri in virgola mobile non vengono mai confrontati per l'uguaglianza esatta. Richiedono un piccolo valore delta per vedere se due numeri sono abbastanza vicini da essere considerati uguali (anche se in questo caso particolare si tratta di un problema minore). – Kayaman