2016-07-07 17 views
-1

Umformen von Gleitkommazahlen in Ganzzahlen werden meistens mit Umsetzungen primitiver Typen durchgeführt. Wenn wir das tun, wird der Bruchteil des Fließkommawerts einfach abgeschnitten. Warum?Warum werden bei der Umwandlung primitiver Datentypen Gleitkommawerte abgeschnitten?

public class Chaz { 
      public static void main(String[] args) { 
      double x = 1234.5678; 
      long g = (long)x; 
      System.out.println(g); 
    } 
} 
+0

weil long ist integer es kann keine Fließkommawerte halten –

+4

Was fragen Sie genau? Fragen Sie, warum ein Long nicht einen Bruchteil haben kann? Oder fragst du, warum es immer nur abrundet (= Abrunden), anstatt etwa aufzurunden, auf 0,5 und höher zu runden oder eine Ausnahme zu werfen, wenn es umrunden soll? –

Antwort

2

Aus-Dokumente,

Die Art lange Daten ist eine 64-Bit-Zweier-Komplement-Ganzzahl. Die signierte lang hat einen Mindestwert von -2^63 und einen Maximalwert von 2^63-1

Es Präzisionsspeicher Dezimalwerte doesnot. Siehe here

0

long steht für Long Integer. Ich verstehe, dass das Problem Datenverlust ist, aber eine ganze Zahl kann nicht ganze Zahlen nicht speichern.

Man kann eine Multiplikation der Anzahl speichern entscheiden, wie folgt aus:

public class Chaz { 
      public static void main(String[] args) { 
      double x = 1234.5678; 
      long g = (long)(x * 10000); 
      System.out.println(g); 
    } 
} 

und wissen dann, dass g tatsächlich 10000X ist der reale Wert. Oder man kann es runden, wenn die nächste ganze Zahl benötigt wird. Wir können nicht ohne zusätzliche Informationen sagen, aber das, was wir tatsächlich sagen können, ist, dass dies ein normales und erwartetes Verhalten ist.