2017-01-25 2 views
-2

J'ai un problème lorsque je multiplie deux variables 'doubles' dans mon programme, le résultat obtenu est zéro. Pourquoi?Le résultat de multiplier deux doubles variables est zéro, pourquoi?

par exemple:

1.0E-321 * 5.321777473676208E-4 = 0.0 

comment éviter le résultat est zéro ?.

+2

'double' a une [valeur minimale] (https://docs.oracle.com/javase/7/docs/api/java/lang/Double.html#MIN_VALUE). Si vous essayez de stocker un nombre inférieur à celui-ci, vous obtenez [underflow] (https://en.wikipedia.org/wiki/Arithmetic_underflow). – khelwood

+0

y a-t-il une solution? –

+0

Utilisez 'BigDecimal'. – Kayaman

Répondre

5

double a un minimum value. Si vous essayez de stocker un nombre inférieur à celui-ci, vous obtenez underflow.

Vous pouvez utiliser la classe BigDecimal.

BigDecimal a = new BigDecimal("1.0E-321"); 
BigDecimal b = new BigDecimal("5.321777473676208E-4"); 
System.out.println(a.multiply(b)); 
-2

Double a un maximum et une valeur de minimus (quelque part autour de -1,7 * 10^308) et depuis ur calulation a un résultat qui se rapproche de 5,3 E325 il montre une erreur u peut essayer multipying les numéros d'abord, puis les exposants pour par exemple 1 * 5.32177 puis ajoutez simplement les puissances (-321 + (- 4)) ainsi vous pouvez obtenir votre réponse. :)