2014-12-15 6 views

Antwort

14

Nein, es ist nicht das gleiche für den Grund, den Sie erwähnt. Hier ein Beispiel:

double x = 894913.3; 
System.out.println(x * 0.0000001); // prints 0.08949133 
System.out.println(x/10000000);  // prints 0.08949133000000001 

ein BigDecimal verwenden, können wir die Differenz zwischen den beiden Werten sehen:

System.out.println(new BigDecimal(0.0000001)); 
System.out.println(new BigDecimal((double)10000000)); 

Ouput:

9.99999999999999954748111825886258685613938723690807819366455078125E-8 
10000000 
+1

Ok, also wo ist die Erklärung? –

+1

@BorisTreukhov In der Frage. :) – biziclop

+6

Die Intuition in der Frage ist die richtige Erklärung. Das nächstliegende Doppelte zu 0.0000001 ist 9.99999999999999954748111825886258685613938723690807819366455078125E-8. –

2

Es ist nicht nur nicht gleich, weil der doppelte Darstellung, aber auch wenn Sie eine ganze Zahl mit einem doppelten multiplizieren, ist das Ergebnis ein Double. Wenn Sie eine ganze Zahl durch eine ganze Zahl devide, ist das Ergebnis eine ganze Zahl:

int i = 1; 
System.out.println(i*0.0000001); 
System.out.println(i/10000000); 

druckt

1.0E-7 
0 
+3

Die Frage nach der Multiplikation eines Doppelten oder Teilens "es", nehme ich das gleiche Doppel an. –

+0

Ups, Sie haben Recht. Soll ich meine Antwort trotzdem behalten oder entfernen? – Marv

Verwandte Themen