2013-09-30 39 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];