Dlaczego Java jest niekonsekwentny przy porównywaniu -0,0 i +0,0? Jaka jest standardowa metoda Java do porównywania liczb do konta -0/+ 0?Java - porównanie zera dodatniego i ujemnego
ja spotkałem tę szczególną 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");
}
}
}
Drukuje następujące:
== --> same
equals --> different
zdecydowanie nie podoba się fakt, że jak można porównać te dwie wartości wpływa na wynik, a ja kocham dla wyjaśnienia.
pierwsze dosłowne równych wewnątrz (-0.0) jest nie Float podwójnie. a druga metoda równości porównuje obiekty, a dla różnych literałów są różne obiekty owijki. –
@amitmahajan To podwójne. Wymagałoby to, aby 'f' lub' F' na końcu było literałem float. – Kayaman
Nawiasem mówiąc, liczby zmiennoprzecinkowe nie są nigdy porównywane dla dokładnej równości. Wymagają małej wartości delta, aby sprawdzić, czy dwie liczby są wystarczająco blisko, aby można je było uznać za równe (chociaż w tym konkretnym przypadku jest to niewielki problem). – Kayaman