Frage:
Bei der Durchführung des Betriebs an zwei doppelten Wertenarten gibt es manchmal Probleme mit abnormalen Ergebniswerten. Zum Beispiel:
System.out.println (19.99+20); System.out.println (1.0-0.66); System.out.println (0,033*100); System.out.println (12.3/100);
Ausgabe:
39.989999999999999999995
0,33999999999999999999997
3.30000000000000003
0.1230000000000001
Lösung:
Einfache Floating -Punkt -Typen schweben und doppelt in Java können Operationen nicht ausführen, da dies in den meisten Fällen normal ist, aber gelegentlich treten Probleme wie oben gezeigt auf. Dieses Problem ist eigentlich kein Fehler in Java, da der Computer selbst binär ist und die Schwimmpunktzahlen eigentlich nur ungefähre Werte sind. Daher geht die Genauigkeit leicht von Binär- zu Dezimalzahlen um, was zu einer Verringerung der Genauigkeit führt.
Um die Genauigkeit zu gewährleisten, müssen Sie die BigDecimal -Klasse verwenden, und Sie können nicht direkt von Double nach BigDecimal konvertieren. Sie müssen doppelt in String und dann in Bigdecimal umwandeln. Das heißt, Sie können die BigDecimal (Double Val) -Methode nicht verwenden, und Sie werden feststellen, dass es keinen Effekt gibt. Verwendung der BigDecimal (String Val) -Methode. Spezifische Beispiele sind unten aufgeführt.
Beispiele für vier Operationen von Doppelart:
1. addieren
public static double add (Doppel A1, Double B1) {BigDecimal A2 = New BigDecimal (Double.ToString (A1)); BigDecimal B2 = neues BigDecimal (double.toString (B1)); return a2.add (b2) .doubleValue (); }2. Subtraktion
öffentliches statisches Doppel -Sub (Doppel A1, Double B1) {BigDecimal A2 = New BigDecimal (Double.ToString (A1)); BigDecimal B2 = neues BigDecimal (double.toString (B1)); return a2.subtract (b2) .doubleValue (); }3.. Multiplizieren Sie
public static double mul (Doppel A1, Double B1) {BigDecimal A2 = New BigDecimal (Double.ToString (A1)); BigDecimal B2 = neues BigDecimal (double.toString (B1)); return a2.multiply (b2) .doubleValue (); }4. Zersetzung
public static double div (Double A1, Double B1, int Scale) {if (scale <0) {werfen neuer illegalArgumentException ("Fehler"); } BigDecimal a2 = new BigDecimal (double.toString (a1)); BigDecimal B2 = neues BigDecimal (double.toString (B1)); return a2.divide (b2, scale, bigdecimal.round_half_up) .doubleValue (); }Wenn der Skalierungsparameter in unvollständiges Aufteilungen unterteilt ist, geben Sie die Genauigkeit an.
Die Lösung für das abnormale Betriebsergebnis des Doppeltyps in Java ist der gesamte Inhalt, den ich mit Ihnen teile. Ich hoffe, Sie können Ihnen eine Referenz geben und ich hoffe, Sie können wulin.com mehr unterstützen.