问题
I can see this is a common problem for new programmers, however I didn't succeed in implementing any of the solution to my code. Basically I want to divide w and v, which must be saved to a double variable. But it prints [0.0, 0.0, ... , 0.0]
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;
}
回答1:
This line here d = w[L] /v[L];
takes place over several steps
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
In other words the precision is already gone before you cast to double, you need to cast to double first, so
d = ((double)w[L]) / (int)v[L];
This forces java to use double maths the whole way through rather than use integer maths and then cast to double at the end
回答2:
Actaully w[L]/v[L]
here both are integer, on division operation it loose precision and trucated to integer
value, latter trucated integer
is converted to double
.
Solution would be convert operand or divisor or both to double, division operaion would produce decimal value.
d = w[L]/(double)v[L];
回答3:
use like following
d = (double) w[L] /v[L];
来源:https://stackoverflow.com/questions/19090526/dividing-two-integers-to-a-double-in-java