Heim > Java > javaLernprogramm > Hauptteil

Lösung für das Ergebnis einer abnormalen Doppeltypoperation in Java

高洛峰
Freigeben: 2017-01-23 16:08:32
Original
2167 Leute haben es durchsucht

Problem:

Bei der Arbeit mit zwei Double-Typ-Werten ist der Ergebniswert manchmal abnormal. 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);
Nach dem Login kopieren

Ausgabe:

39,989999999999995
0,33999999999999997
3,3000000000000003
0, 1230 0000000000001

Lösung:

Die einfachen Gleitkommatypen float und double in Java können nicht bedient werden, da dies in den meisten Fällen normal ist, gelegentlich jedoch das oben gezeigte Problem auftritt. Dieses Problem ist eigentlich kein JAVA-Fehler, da der Computer selbst binär ist und Gleitkommazahlen eigentlich nur Näherungen sind. Daher geht bei der Konvertierung von binären in dezimale Gleitkommazahlen leicht die Genauigkeit verloren, was zu einer Verringerung der Genauigkeit führt.

Um die Genauigkeit sicherzustellen, müssen Sie die BigDecimal-Klasse verwenden und können nicht direkt von double in BigDecimal konvertieren. Sie müssen double in einen String und dann in BigDecimal konvertieren. Das heißt, die Methode BigDecimal (double val) kann nicht verwendet werden und Sie werden feststellen, dass sie keine Wirkung hat. Zur Verwendung der BigDecimal(String val)-Methode. Konkrete Beispiele sind unten aufgeführt.

Beispiele für vier arithmetische Operationen vom Typ Double:

1. Addition

public static double add(double a1, double b1) {
   BigDecimal a2 = new BigDecimal(Double.toString(a1));
   BigDecimal b2 = new BigDecimal(Double.toString(b1));
   return a2.add(b2).doubleValue();
  }
Nach dem Login kopieren

2 >

public static double sub(double a1, double b1) {
   BigDecimal a2 = new BigDecimal(Double.toString(a1));
   BigDecimal b2 = new BigDecimal(Double.toString(b1));
   return a2.subtract(b2).doubleValue();
  }
Nach dem Login kopieren
3. Multiplikation

public static double mul(double a1, double b1) {
   BigDecimal a2 = new BigDecimal(Double.toString(a1));
   BigDecimal b2 = new BigDecimal(Double.toString(b1));
   return a2.multiply(b2).doubleValue();
  }
Nach dem Login kopieren
4. Division

public static double div(double a1, double b1, int scale) {
  if (scale < 0) {
   throw new IllegalArgumentException("error");
  }
  BigDecimal a2 = new BigDecimal(Double.toString(a1));
  BigDecimal b2 = new BigDecimal(Double.toString(b1));
  return a2.divide(b2, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
 }
Nach dem Login kopieren
Der Skalenparameter ist unteilbar die Präzision.

Die obige Lösung für das Ergebnis einer abnormalen Doppeltypoperation in Java ist der gesamte vom Herausgeber geteilte Inhalt. Ich hoffe, dass er Ihnen eine Referenz geben kann, und ich hoffe, dass Sie die chinesische PHP-Website unterstützen.

Weitere verwandte Artikel zu Lösungen für abnormale Doppeltyp-Operationsergebnisse in Java finden Sie auf der chinesischen PHP-Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage