2017-10-10 2 views
-3

Ich habe die folgende Funktion, und ich kann den double Typ der Parameter nicht ändern.Wie kann ich Double als Funktionsparameter verwenden, ohne die Präzision zu verlieren?

double latitude = coordinate.x; 
double longitude = coordinate.y; 
createEPoint(latitude, longitude)); 

Die Vars Breite und Länge hat eine große Anzahl von Dezimalstellen (35,94777225005756), und ich brauche seine Präzision zu halten. Ich weiß, dass ich oder andere Klassen verwenden könnte, aber wie gesagt, ich kann die Parameter von createEPoint(double lat, double lon) nicht ändern.

Inzwischen, wenn ich die Parameter von EPoint bekomme, werden die Werte für den Längen- und Breitengrad automatisch gerundet, hast du irgendwelche Ideen, das zu vermeiden und die Genauigkeit der Zahlen zu behalten?

+1

Nun, wenn Doppel-Genauigkeit verliert dann können Sie nicht viel darüber hinaus ändern den Typ der Parameter. – Thomas

+0

Dann ist die @Deprecated Annotation sehr praktisch. Überlege dir also deine Methode zu überladen. –

+4

Wenn du doppelte akzeptieren musst, dann ist es schon zu spät. Es gibt keinen magischen Weg, mehr Präzision von einem Double zu bekommen, als es bei der Eingabe war. – khelwood

Antwort

2

Das nächste Doppel zu 35.94777225005756 hat den genauen Wert 35.94777225005756093878517276607453823089599609375 und sein Double.toString Ergebnis, der Standardausdruck, ist 35.94777225005756.

Es gibt inhärente Genauigkeitsverluste bei der Konvertierung von Ihrer Dezimalzahl in die doppelte, und nichts kann das wiederherstellen. Sie müssten eine zweite Repräsentation des Punktes mit BigDecimal-Koordinaten speichern und tragen.

Es ist jedoch sehr unwahrscheinlich, dass jemals ein physischer Ort zu einem Teil in 1e15 gemessen wurde, die ungefähre Genauigkeit der Dezimal - Doppel - Dezimal - Umwandlung. Wenn dies, wie von den Variablennamen vorgeschlagen, ein Winkel in Grad zu einem Ort auf einer Kugel mit einem Umfang von 40.075 Kilometern ist, ist der Präzisionsverlust viel kleiner als ein Mikron.

Verwandte Themen