我可以看到这是新程序员的常见问题,但是我没有成功实现任何解决方案到我的代码。基本上我想分割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