2011-04-25 10 views
0

페이스 북에서 좌표로 좌표를 가져오고 때로는 소수점 이하 12 자까지 사용할 수 있습니다. 이 값을 int (* 1E6)로 변환 할 때 일부 숫자를 면도하기 때문에 정확도가 떨어집니다. 예를 들어int로 변환 할 때 좌표가 정확하지 않습니다.

, 이중 59.313732591172은 내가 정확성을 유지할 수있는 방법 59313732.

int로서 표현된다? Android에서이 작업을 수행 할 수있는 방법이 있습니까? GeoPoint 클래스를 사용하면 int가 붙어있는 것처럼 보입니다.

마이크

+0

안녕 Mike 당신이 int로 당신의 위치를 ​​변환하고 싶어 이상한 것 ... 더블 int보다 정확합니다. 왜 당신이 int로 그것을 필요로하는지 설명 할 수 있습니까? – travega

+0

12 자리 십진법이 매우 정확하다는 사실에도 불구하고 ... 나는 수학을하지는 않았지만 1E6은 1 미터 또는 2 미터로 정확해야한다고 생각합니다. 물론 이것이 필요합니까? – WarrenFaith

+0

@travega : 사용하고있는 Google지도 API에는 위치를 정확히 나타내는 데 사용되는 GeoPoint라는 클래스가 있습니다. http://code.google.com/intl/sv/android/add-ons/google-apis/reference /com/google/android/maps/GeoPoint.html 그리고 인수로만 int를 사용합니다. 그물에 대한 모든 토론은 * 1E6을 사용하여 int를 double로 변환하는 것에 대해 이야기하지만 그 문제가 있습니다. – Mike

답변

1

int은 정수로만 표시되므로 요청하는 동작을 볼 수 있습니다. 당신이 더 많은 자리를 유지 중 하나를 두 번 계속 사용해야하는 경우

59.313732591172 * 1E6 = 59313732.591172 

(int)59313732.591172 = 59313732 

, int 대신 long로 변환하고 더 큰 수의 곱 (예 : 1E12)

이 단지 주조 방법 부동 소수점 int/long 형식의 모든 언어로 작동합니다. 여기는 Java 기능이며 Android에만 국한된 것은 아닙니다.

+0

알아. 문제는 내가 사용하고있는 API (GeoPoint 클래스 : http://code.google.com/intl/sv/android/add-ons/google-apis/reference/com/google/android/maps/GeoPoint .html)는 int를 인수로 취한다. – Mike

+0

아. 나쁜 Google. int에 캐스팅하기 전에 0.5를 더하는 것이 아마도 당신이 할 수있는 최선의 방법입니다. 참고로, 페이스 북 이벤트를 사용했을 때, 거리 주소를 찾는 것이 GPS 참조를 사용하는 것보다 정확하다고 생각했습니다. 어쩌면 데이터 도용을 막기 위해 데이터가 급증 할 수도 있습니다 (일부 차량용 GPS 시스템은 이러한 이유로 맵을 오염 시켰습니다). 그러나 대략적인 계산에 따르면 미세도는 약 10cm까지 정확합니다 (km * 1000/(360x1e6)의 기수). 워렌 (Warren)을 듣겠습니다. 주석을 반복하지 않도록 GeoPoint에 초점을 맞추어 질문을 편집하는 것이 좋습니다. –

+0

감사합니다. 좋은 점은 질문을 수정하겠습니다. – Mike

0

int 어떤 숫자가 너무 짧다 (실제로 수의 대부분)은 32 비트를 가지고 있기 때문이다. 대신 long을 사용하십시오. here

관련 문제