Nehmen wir zur Kenntnis, welche Teile während der Entwicklung von Accounting Sirth Japan durchlaufen wurden. Dies ist eine Geschichte, als ich zuvor die Entwicklung nach Übersee ausgelagert hatte, und es gab einen Teil, in dem ich leicht mit Floats und Doubles rechnen konnte, und ich habe sie selbst korrigiert.
Grundsätzlich sollten binäre Gleitkommatypen wie Float und Double nicht in monetären Berechnungen verwendet werden. Warum? Es ist genau in Punktberechnung Weil es nicht berechnet werden kann.
Was bedeutet das
float a = 1.03;
float b = 0.42;
System.out.println(a-b)
0.6100000000000001
Es wird sein. Ich kann dir nicht den genauen Betrag geben ...
Verwenden Sie Big Decimal, wenn Sie den Betrag genau berechnen möchten.
import java.math.BigDecimal
BigDecimal a = new BigDecimal("1.03");
BigDecimal b = new BigDecimal("0.42");
BigDecimal c = a.subtract(b);
System.out.println(c.toString());
0.61
BigDecimal kann nicht durch einen Berechnungscode beschrieben werden, daher ist es ohnehin schwer zu erkennen und scheint ärgerlich zu sein.
Es gibt eine Falle, wenn es in Ordnung ist, Big Decimal hier zu verwenden. Wenn Sie bei der anfänglichen Zuweisung in BigDecimal einen Fehler machen, ist dieser bedeutungslos, obwohl Sie versuchen, in BigDecimal genau zu berechnen. Dies bedeutet, dass Sie einen Bruch beim Ersetzen nicht numerisch ersetzen dürfen. Sie müssen es durch einen Buchstaben ersetzen.
BigDecimal rate1 = new BigDecimal("0.1");
BigDecimal rate2 = new BigDecimal(0.1);
Das ist der Unterschied Ersteres kann genau berechnet werden, da es als Zeichenfolgenargument übergeben wird. Letzteres ist eine Falle, in der 0.1 zum Konstruktor des Doppelarguments fließt, also als binärer Gleitkomma behandelt und dann zugewiesen wird! Ich brauche den Konstruktor für doppelte Argumente selbst nicht und möchte, dass es sich um einen Kompilierungsfehler handelt.
Ich habe überall Floats und Doubles für das Outsourcing verwendet, und es war mühsam, das Problem zu beheben. Ich habe eine beängstigende Fraktionsverarbeitung durchgeführt, um den Fehler durch den Umgang mit kleinen Händen zu korrigieren. Ich war ängstlich. Es ist einfach, die Verhältnisberechnung und Koordinatenberechnung der Bildschirmkonfiguration zu programmieren, die keine perfekte Genauigkeit erfordert. Daher ist es einfach, double oder float zu verwenden, aber für diejenigen, die ein System bauen, das mit Geld umgeht, "double for money". Es ist allgemein bekannt, dass Sie von Anfang an wissen sollten, dass "Float verboten ist". Ich werde später um 1 Yen weinen.
Wir haben diese Offshore-Produktion eingestellt und komplett im eigenen Haus hergestellt. Derzeit suchen wir Freunde, um das System gemeinsam zu entwickeln.
Recommended Posts