BigDecimal Subtraktion
Möchte ich subtrahieren 2 double
Werte, und ich habe versucht den folgenden code.
double val1 = 2.0;
double val2 = 1.10;
System.out.println(val1 - val2);
und ich habe die Ausgabe als,
0.8999999999999999
Für die erste Ausgabe als 0.9
ich habe versucht, mit BigDecimal
Sie wie folgt vor,
BigDecimal val1BD = new BigDecimal(val1);
BigDecimal val2BD = new BigDecimal(val2);
System.out.println(val1BD.subtract(val2BD));
Und ich habe die Ausgabe als,
0.899999999999999911182158029987476766109466552734375
Dann habe ich versucht mit BigDecimal.valueOf()
val1BD = BigDecimal.valueOf(val1);
val2BD = BigDecimal.valueOf(val2);
System.out.println(val1BD.subtract(val2BD));
Und schließlich habe ich die Ausgabe als 0.9
.
Meine Frage ist was ist der Unterschied zwischen Fall 2 & Fall 3?
In Fall 2 warum habe ich die Ausgabe so?
Du musst angemeldet sein, um einen Kommentar abzugeben.
BigDecimal.valueOf(double d)
verwendet kanonischeString
Darstellung der double-Wert internDouble.toString(double)
verwendet wird, das ist, warum Sie immer0.9
im zweiten Fall.Während mit
new BigDecimal(0.9)
es wandelt Wert auf genaue floating point Darstellungdouble
Wert ohne VerwendungString
Darstellung,ZUM BEISPIEL :
AUSGABE :
BigDecimal
ist von einemString
oderchar[]
. Sobald Sie einedouble
ein Rundungsfehler wurde bereits gemacht. Konvertieren zurück zu einemString
kann oder kann nicht rückgängig machen, dass Fehler. Mathematisch, das genaue double-Wert ist die bessere Wahl, wenn Sie besorgt sind, mit der Genauigkeit.Nur für die anderen, die kamen hier auf der Suche für einige andere Problem mit BigDecimal(nicht im Zusammenhang mit der Frage oben)...
denken Sie daran, um zu geben ein mathContext zu den Methoden, Sie zu vermeiden, bestimmte Probleme, z.B.