Je peux voir que c'est un problème commun pour les nouveaux programmeurs, mais je n'ai réussi à implémenter aucune solution à mon code. Fondamentalement, je veux diviser w et v, qui doivent être enregistrés dans une double variable. Mais il imprime [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;
}
Cette ligne ici d = w[L] /v[L];
se déroule en plusieurs étapes
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
En d'autres termes, la précision a déjà disparu avant de lancer pour doubler, vous devez d'abord lancer pour doubler, donc
d = ((double)w[L]) / (int)v[L];
Cela oblige Java à utiliser des mathématiques doubles tout au long plutôt que d'utiliser des mathématiques entières, puis à transtyper pour doubler à la fin
Actaully w[L]/v[L]
ici, les deux sont des nombres entiers, lors d'une opération de division, ils perdent leur précision et sont tronqués à la valeur integer
, cette dernière tronquée integer
est convertie en double
.
La solution serait de convertir l'opérande ou le diviseur ou les deux en double, l'opération de division produirait une valeur décimale.
d = w[L]/(double)v[L];
utiliser comme suivant
d = (double) w[L] /v[L];