web-dev-qa-db-fra.com

Diviser deux entiers en un double dans java

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;
}
16
roarknuppel

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

32
Richard Tingle

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];
3

utiliser comme suivant

    d = (double) w[L]  /v[L];
2
stinepike