2013-09-30 49 views
11

我可以看到這是新程序員的常見問題,但是我沒有成功實現任何解決方案到我的代碼。基本上我想分割w和v,它們必須保存爲雙變量。但它打印[0.0,0.0,...,0.0]在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:整數除法。它會給你一個截斷的整數結果。寫d =(double)w [L]/v [L]; – Bathsheba

+0

[爲什麼是1/3 == 0的結果]可能的重複(http://stackoverflow.com/questions/4685450/why-is-the-result-of-1-3-0) – fabian

回答

26

這條線在這裏d = w[L] /v[L];使用發生在幾個步驟

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 

換句話說,你投加倍前的精度已經走了,你需要投了第一,所以

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

這會迫使java使用整數方式的雙數學,而不是使用整數數學,然後在結尾加上兩倍的數字

+0

不需要投到int,它已經是一個int! –

+0

好的解釋! – ppeterka

+1

@SilviuBurcea我更試圖表示它*是*一個int –

3

Actaully w[L]/v[L]這裏兩者都是整數,就除法運算它鬆散精度和trucated到integer值,後者trucated integer轉換爲double

解決方案將轉換操作數或除數或二者都加倍,除法操作會產生十進制值。

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

像下面

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