web-dev-qa-db-fra.com

Java double vs BigDecimal pour latitude / longitude

Lors du stockage de latitudes/longitudes qui sont généralement au format: 44.087585 (c'est-à-dire max 2 chiffres avant le point et 6dp) dois-je me soucier des bigdecimals?

55
DD.

L'utilisation du double a une précision suffisante pour des lat/lon précis jusqu'à des pouces pour 6-7 décimales. Dans l'aviation, si des degrés décimaux sont utilisés, ils atteignent généralement au moins 7 décimales. Dans nos simulations de la NASA, les données lat/lon sont doubles tandis que toutes les autres attitudes et altitudes sont flottantes. En d'autres termes, la 6ème décimale pour l'altitude n'est pas significative tandis que la 6ème décimale pour lat/lon est pour la précision inférieure au pied. Vous ne devez pas utiliser float pour lat/lon si vous avez besoin d'une précision inférieure aux pieds.

Vous pouvez jouer dans Google Earth pour voir quelle précision vous obtenez en plaçant des marqueurs et en manipulant le dernier chiffre décimal.

143
TreyA

double devrait convenir aux latitudes/longitudes. BigDecimal devient plus important une fois que vous commencez à manipuler des devises ou avez besoin d'avoir plus de contrôle sur la précision.

25
CoolBeans

Si vous êtes préoccupé par la précision, vous devriez probablement aller avec BigDecimalpour de nombreuses raisons abordées dans cet article . Cela dit, double ou float devrait être très bien pour stocker ce dont vous avez besoin pour pouvoir satisfaire la plage de valeurs dont vous avez besoin.

À seulement six décimales de précision, je ne pense pas que double ou float vous déclenchera, mais si vous commencez à agréger les valeurs de quelque manière que ce soit, les imprécisions mineures peuvent commencer à s'additionner.

6
Daniel DiPaolo

Un double a suffisamment de précision pour le stocker. Cependant, lors de l'affichage aux utilisateurs, utilisez une chaîne de format comme %.6f pour que vous n'imprimiez pas les chiffres des ordures.

6
Chris Jester-Young

La pire précision de stockage en double est d'environ 3 nm.

Si vous souhaitez le calculer en Java:

Math.ulp((double) 180) * 60 * 1852

3.1582203519064933E-9

En prime; la pire précision que vous obtenez en stockant dans des flotteurs est de 1,7 mètre.

3
Gussoh

si vous voulez contrôler des nano-robots dans leurs nano-voyages en utilisant nano-GPS - optez pour BigDecimal. sinon - float/double suffit.

3
keymone