2017-01-25 4 views
-2

Ich habe ein Problem, wenn ich zwei 'doppelte' Variablen in meinem Programm multipliziere, das Ergebnis, das ich bekomme, ist Null. Warum?Das Ergebnis der Multiplikation zweier doppelter Variablen ist Null, warum?

zum Beispiel:

1.0E-321 * 5.321777473676208E-4 = 0.0 

, wie das Ergebnis zu verhindern, ist nicht Null ?.

+2

'double' hat einen [minimalen Wert] (https://docs.oracle.com/javase/7/docs/api/java/lang/Double.html#MIN_VALUE). Wenn Sie versuchen, eine kleinere Zahl zu speichern, erhalten Sie [Unterlauf] (https://en.wikipedia.org/wiki/Arithmetic_underflow). – khelwood

+0

Gibt es eine Lösung? –

+0

Verwenden Sie 'BigDecimal'. – Kayaman

Antwort

5

double hat eine minimum value. Wenn Sie versuchen, eine kleinere Zahl zu speichern, erhalten Sie underflow.

Sie könnten die Klasse BigDecimal verwenden.

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

Doppel hat ein Maximum und ein minimus Wert (irgendwo um -1.7 * 10^308), und da ur Berechnungstool ein Ergebnis hat, dass es zeigt, um einen Fehler zu 5,3 E325 annähert u zuerst und dann die Zahlen können versuchen multipying die Exponenten für zB 1 * 5.32177 und dann fügen Sie einfach die Befugnisse (-321 + (- 4)) so können Sie Ihre Antwort bekommen. :)

Verwandte Themen