5

Sto memorizzando latitudine e longitudine sul lato server (piattaforma JAVA).float e double datatype è buono per memorizzare lattitude e longtitude?

Per memorizzare questi valori, sto usando float e double datatype sul lato server. Sono venuto a sapere che float e double non sono dei tipi di dati primitivi raccomandati (che non è consigliabile utilizzare le valute in modo professionale), perché float e double con problema di arrotondamento di precisione.

Nel mio caso, sto solo confrontando le coordinate memorizzate (latitudine e longitudine) sul lato server.

Domanda 1:

Confrontando le coordinate con i tipi di dati (float o doppia) farà alcun problema in futuro?

Domanda 2:

Utilizzando grande decimale è buono? o Andare con galleggiante o doppio è più sicuro?

Per favore guidami.

+0

6 cifre decimali (che è la massima precisione di un galleggiante) è sufficiente. Vedi http://gis.stackexchange.com/a/8674 – Martin

+0

@JarrodRoberson Questa domanda riguarda Java, l'altra domanda riguarda MySQL. Come può questa domanda essere un duplicato allora? – Stijn

risposta

6

Non è una questione di sicurezza, è solo una questione di precisione. Non considererei i float, ma i doppi sono quelli che penso siano ideali qui. Hai solo bisogno di vedere qual è la precisione che puoi ottenere da una doppia e vedere se si adatta ad un valore di longitudine/latitudine. Penso che sia più che sufficiente.

Else BigDecimal è solo un semplice backdoor al vostro problema, utilizzare se si desidera una maggiore precisione

+1

Per curioso, Volevo sapere Quanta precisione può gestire il doppio. Come da mia osservazione, può gestire 14 cifre di precisione (nel mio caso). Quindi penso che sia buono per me. Se il doppio può gestire più di 20 cifre, il doppio sarebbe l'ideale per la mia app. Il tuo suggerimento, per favore. – ArunRaj

+0

a seconda del java che si sta utilizzando, il doppio tipo di dati primitivo è lungo 64 bit con ovviamente 1 cifra per il seno, ecc. È possibile trovare le informazioni sulla precisione qui: http://docs.oracle.com/ javase/specs/jls/se7/html/jls-4.html # jls-4.2.3 – ThaBomb

+0

Grazie mille per la tua preziosa guida. – ArunRaj

2

non è necessario eseguire alcun arrotondamento sui valori di longitudine o latitudine, quindi utilizzare quello desiderato. Il doppio è più preciso, quindi lascia che sia il fattore più importante nella tua decisione.

Quanto precisione richiedono i valori di lat/long?

Per una precisione millimetrica su una mappa, è possibile che si desideri visualizzare un grande decimale, ma per i valori vaghi, il valore float è sufficiente.

+1

Potrebbe essere necessario 20 cifre. Ma non sono sicuro. Secondo la mia osservazione questo è il caso. E ovviamente non sto facendo nessuna operazione di arrotondamento. Sto semplicemente controllando la seguente condizione \t \t if ((swLat <= lattitude) && (swLng <= longtitude) && (neLat> = lattitude) && (neLng> = longtitude)) ... Se ho implementato con double, il la condizione sta funzionando bene. Ma ho paura di usarlo, perché ho bisogno di precisione.Usare Double è un'opzione ideale per il mio caso? – ArunRaj

11

Si dovrebbe iniziare con the accuracy che desiderate. Una volta stabilito ciò, puoi scegliere un tipo di dati adatto.

Se si decide che una precisione di 5 cifre decimali (1.1132 m) è sufficiente, è possibile andare facilmente con float. Più accurato deve essere il calcolo, più dovresti inclinarti all'utilizzo di double e infine BigDecimal.

Quando si confrontano i numeri in virgola mobile, è necessario incorporare anche la precisione necessaria.

+3

+1 per questa risposta. Controlla questo link per avere un'idea della precisione che ti serve http://en.wikipedia.org/wiki/Wikipedia%3AWikiProject_Geographical_coordinates#Precision – MrUpsidown