5 Stimmen

Erläuterung der Ausgabe eines Java-Programms

Ich bin auf das folgende Programm gestoßen

class Boolean {  
  public static void main(String argv[]) {  
    boolean x;  
    x = 4.4f == 4.4;  
    System.out.println(x);  
  }  
} 

Die Ausgabe des folgenden Programms lautet false

Wenn wir das Programm jedoch auf folgende Weise schreiben, dann

class Boolean {  
    public static void main(String argv[]) {  
      boolean x;  
      x = 4.5f == 4.5;  
      System.out.println(x);  
    }  
}

In diesem Fall lautet die Ausgabe true

Kann mir jemand erklären, warum?

0voto

ninesided Punkte 22819

Das liegt daran, dass ein Float kein Double ist und man keinen direkten Vergleich anstellen kann, weil ein Float nur ein Näherungswert ist. Werfen Sie einen Blick auf den folgenden Code:

  public static void main(String args[]) {
  double a, b;

  a = 4.4f;
  b = 4.5f;
  System.out.println("4.4f implicitly cast to a double = "+a);
  System.out.println("4.5f implicitly cast to a double = "+b);

  }

Sie werden sehen, dass 4.4f, wenn es implizit in ein Double umgewandelt wird, in Wirklichkeit 4.400000095367432 ist.

0voto

Susam Pal Punkte 29750

Zusätzlich zu dem, was alle gesagt haben, ist hier ein sehr beliebtes Beispiel, um diese Sache mit Fließkommaoperationen zu demonstrieren.

System.out.println(0.3 - 0.2 - 0.1);

Es wird nicht gedruckt 0 . In der Tat würde eine sehr kleine Zahl gedruckt werden, da bei Fließkommaoperationen Abbruchfehler auftreten, wenn bestimmte Brüche in der Binärdarstellung nicht abschließend wiederholt werden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X