我可以看到這是新程序員的常見問題,但是我沒有成功實現任何解決方案到我的代碼。基本上我想分割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;
}
我可以看到這是新程序員的常見問題,但是我沒有成功實現任何解決方案到我的代碼。基本上我想分割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;
}
這條線在這裏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使用整數方式的雙數學,而不是使用整數數學,然後在結尾加上兩倍的數字
Actaully w[L]/v[L]
這裏兩者都是整數,就除法運算它鬆散精度和trucated到integer
值,後者trucated integer
轉換爲double
。
解決方案將轉換操作數或除數或二者都加倍,除法操作會產生十進制值。
d = w[L]/(double)v[L];
像下面
d = (double) w[L] /v[L];
Google:整數除法。它會給你一個截斷的整數結果。寫d =(double)w [L]/v [L]; – Bathsheba
[爲什麼是1/3 == 0的結果]可能的重複(http://stackoverflow.com/questions/4685450/why-is-the-result-of-1-3-0) – fabian