2013-09-30 6 views
11

Ich kann sehen, das ist ein häufiges Problem für neue Programmierer, jedoch ist es mir nicht gelungen, irgendeine der Lösung für meinen Code zu implementieren. Grundsätzlich möchte ich w und v teilen, die zu einer doppelten Variable gespeichert werden müssen. Aber es druckt [0.0, 0.0, ..., 0.0]Teilen von zwei ganzen Zahlen zu einem Doppel in Java

public static double density(int[] w, int[] v){ 
double d = 0; 
    for(L = 0; L < w.length; L++){ 
     d = w[L] /v[L]; 
    } 
    return d; 
} 
+2

Google: Integer Division. Es gibt Ihnen ein ganzzahliges Ergebnis mit Kürzung. Schreibe d = (doppelt) w [L]/v [L]; – Bathsheba

+0

Mögliches Duplikat von [Warum ist das Ergebnis von 1/3 == 0?] (Http://stackoverflow.com/questions/4685450/why-is-the-result-of-1-3-0) – fabian

Antwort

26

Diese Linie hier d = w[L] /v[L]; über mehrere Schritte unternimmt

d = (int)w[L]/(int)v[L] 
d=(int)(w[L]/v[L])   //the integer result is calculated 
d=(double)(int)(w[L]/v[L]) //the integer result is cast to double 

Mit anderen Worten: die Präzision weg ist schon, bevor Sie zu verdoppeln werfen, müssen Sie zuerst gegossen, so

d = ((double)w[L])/(int)v[L]; 

Dies zwingt Java, Doppelmathematik den ganzen Weg durch zu verwenden, anstatt ganzzahlige Mathematik zu verwenden und dann am Ende zu verdoppeln

+0

Keine Notwendigkeit um ins int zu werfen, ist es schon ein int! –

+0

Schöne Erklärung! – ppeterka

+1

@SilviuBurcea Ich versuche eher zu repräsentieren, dass es * ist * ein int –

3

actaully w[L]/v[L] hier beide integer sind, auf Divisionsoperation es lose Präzision und trucated zu integer Wert, letztere trucated integer umgewandelt wird double.

Lösung wäre Operand oder Divisor oder beide zu verdoppeln, Divisionsoperion würde Dezimalwert erzeugen.

d = w[L]/(double)v[L]; 
2

Verwendung wie folgt

d = (double) w[L] /v[L];