Подтвердить что ты не робот

Java double vs BigDecimal для широты/долготы

При хранении широт/долгот, которые обычно имеют формат: 44.087585 (т.е. max 2 числа перед точкой и 6dp), мне нужно беспокоиться о больших децималах?

4b9b3361

Ответ 1

Использование double имеет достаточную точность для точного lat/lon вплоть до дюймов для 6-7 знаков после запятой. В авиации, если используются десятичные градусы, они обычно идут как минимум в 7 знаков после запятой. В наших симуляциях NASA данные lat/lon удваиваются, а все остальные отношения и высота - поплавки. Другими словами, шестое десятичное место для высоты не имеет значения, в то время как шестое десятичное значение для lat/lon для точности субфута. Вы не должны использовать float для lat/lon, если вам нужна точность до подножек.

Вы можете играть в Google Планета Земля, чтобы узнать, какую точность вы получите, разместив маркеры и манипулируя последней десятичной цифрой.

Ответ 2

double должно быть хорошо для широт/долгот. BigDecimal становится более важным, когда вы начинаете манипулировать валютой или нуждаетесь в большем контроле над точностью.

Ответ 3

A double имеет достаточную точность для хранения этого. Однако при отображении пользователям используйте строку формата, например %.6f, чтобы вы не печатали цифры мусора.

Ответ 4

Если вас беспокоит точность, вам следует, вероятно, пойти с BigDecimal по многим причинам, описанным в этом сообщении. Тем не менее, double или float должны быть в порядке, чтобы хранить то, что вам нужно, с точки зрения возможности удовлетворить диапазон значений, которые вам нужны.

В шестизначных точках точности я не думаю, что double или float будет вас трогать, но если вы начнете агрегировать значения каким-либо образом, незначительные неточности могут начать складываться.

Ответ 5

если вы хотите управлять нанороботами в своих нано-путешествиях с помощью nano-GPS - идите на BigDecimal. иначе - float/double достаточно.

Ответ 6

Наихудшая точность хранения как двойного составляет около 3 нм.

Если вы хотите рассчитать его в Java:

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

3.1582203519064933E-9

В качестве бонуса; наихудшая точность, которую вы получаете от хранения в поплавках, составляет 1,7 метра.