Das Beispiel in diesem Artikel beschreibt die Operationsmethode von BigDecimal in Java. Teilen Sie es als Referenz mit allen. Die spezifische Analyse lautet wie folgt:
Da Double und Float nicht präzise genug sind, muss bei kommerziellen Berechnungen BigDecimal verwendet werden. Das BigDecimal-Objekt wird wie folgt erstellt:
Kopieren Sie den Code wie folgt: BigDecimal b = new BigDecimal("12.000001");
System.out.println(b);
Das Ausgabeergebnis ist: 12.000001;
BigDecimal kann beim Erstellen in String und Double übergeben werden, es ist jedoch am besten, String zu verwenden. Schauen Sie sich den folgenden Code an:
Kopieren Sie den Code wie folgt: BigDecimal b = new BigDecimal("12.000001");
System.out.println(b);
BigDecimal c = new BigDecimal(12.01);
System.out.println(c);
Das laufende Ergebnis ist:
12.000001
12.0099999999999997868371792719699442386627197265625
Es ist ersichtlich, dass die Präzision verloren geht, wenn double übergeben wird.
Andere Operationen von BigDecimal sind wie folgt:
Kopieren Sie den Code. Der Code lautet wie folgt: //Addition
public static BigDecimal add(String num1, String num2) {
BigDecimal bd1 = new BigDecimal(num1);
BigDecimal bd2 = new BigDecimal(num2);
return bd1.add(bd2);
}
//Subtraktion
public static BigDecimal subtract(String num1, String num2) {
BigDecimal bd1 = new BigDecimal(num1);
BigDecimal bd2 = new BigDecimal(num2);
return bd1.subtract(bd2);
}
//Multiplikation
public static BigDecimal multiply(String num1, String num2) {
BigDecimal bd1 = new BigDecimal(num1);
BigDecimal bd2 = new BigDecimal(num2);
return bd1.multiply(bd2);
}
//Division
öffentliche statische BigDecimal-Division(String num1, String num2, int i) {
BigDecimal bd1 = new BigDecimal(num1);
BigDecimal bd2 = new BigDecimal(num2);
// i ist die Anzahl der beizubehaltenden Ziffern, BigDecimal.ROUND_HALF_UP stellt die Rundungsregel dar
return bd1.divide(bd2, i, BigDecimal.ROUND_HALF_DOWN);
}
Es ist notwendig, die Teilung hervorzuheben. Der dritte Parameter ist, ob gerundet werden soll.
ROUND_HALF_DOWN bedeutet, dass 1 nicht eingegeben wird, wenn 5 auftritt, dh 1,5 -> 1;
ROUND_HALF_UP bedeutet, dass bei Auftreten von 5 1 eingegeben wird, dh 1,5 -> 2;
Aber es gibt einige Dinge zu beachten:
Wenn wir ROUND_HALF_DOWN verwenden, kopieren Sie den Code wie folgt: System.out.println(this.divide("67.75", "5",4));
System.out.println(this.divide("67.75", "5",1));
System.out.println("-------");
System.out.println(this.divide("67.751", "5",4));
System.out.println(this.divide("67.751", "5",1));
Die Laufergebnisse sind wie folgt:
13.5500
13.5
-------
13.5502
13.6
Logischerweise sollte das zweite Ergebnis 13,5 sein! Warum wurde es 13,6? Nach vielen Tests habe ich darüber nachgedacht und festgestellt, dass diese Rundung nicht auf der Verschiebung nach der Präzisionsziffer basiert und diese mit 5 vergleicht, sondern alle Daten nach der Präzisionsziffer mit 5 verglichen werden. Mit anderen Worten: 13,5500 ist genau eine Ziffer, dann verwenden Sie 0,0500, um mit 5 zu vergleichen, und 13,5502 ist auf eine Ziffer genau, dann verwenden Sie 0,0502, um mit 5 zu vergleichen. Es ist größer als 5, also schließt es nach oben.
Ich hoffe, dass dieser Artikel für die Java-Programmierung aller hilfreich sein wird.