2017-03-28 13 views
-1

ich arbeite auf einer Währungsumrechner Android-Anwendung, in dem ich ein Doppelzimmer mit einem anderen doppelten Wert zu multiplizieren, versuchen aber nach Multiplikation mir nicht dem richtigen Wert zu bekommen. Ich habe auch versucht BigDecimal und immer noch nicht die richtige Menge. Was wäre der beste Weg, um Doppel zu multiplizieren?wie multiplizieren zwei Doppeln

second_amount = Double.parseDouble(second.getText().toString()); 
       first_amount = Double.parseDouble(first.getText().toString()); 
       result = first_amount * second_amount; 
       second.setText("" + df.format(result)); 

nach

BigDecimal mit
   second_amount = Double.parseDouble(); 
       bdf = new BigDecimal(second.getText().toString()); 
       //first_amount = Double.parseDouble(first.getText().toString()); 
       bds = new BigDecimal(second.getText().toString()); 
       BigDecimal bdr = bdf.multiply(bds); 
       //result = first_amount * second_amount; 
       second.setText("" + bdr); 
+0

Sie erhalten die richtigen Doppel. Was Sie nicht verstehen, ist, wie Doppelarbeit funktioniert. Doppel sind nicht unendlich genau und sie speichern keine Dezimalzahlen. Sie speichern Binärzahlen - Potenzen von 2 und 1/2. Ein einfacher Bruch wie .3 wird also nicht genau in einem Doppel gespeichert. –

+0

Was erhalten Sie anstelle des richtigen Wertes? Ich sollte sagen, dass Sie die Multiplikation richtig machen. –

+0

@ OleV.V. Wenn ich 1.9062 mit 100 multipliziere, bekomme ich 1910.00 –

Antwort

3

Wenn Sie so etwas wie Währungsumrechnungen tun, wo exakte Darstellung von kurzen Fragen Dezimalbrüchen, ist es am besten nicht doppelt einzubeziehen überhaupt. Übergeben Sie die ursprüngliche Zeichenfolgendarstellung der Zahl direkt an den BigDecimal-Konstruktor, und führen Sie Ihre Arithmetik in BigDecimal aus.

Zum Beispiel new BigDecimal("0.1") hat den Wert 0,1, aber new BigDecimal(0.1) hat den sehr leicht unterschiedlichen Wert 0,1000000000000000055511151231257827021181583404541015625 aufgrund der Umwandlung des Literals Rundung zu verdoppeln.

+0

Vielen Dank, dass Sie meinen Tag gerettet haben. Es funktionierte wie Magie. –

Verwandte Themen