2011-04-25 70 views
0

我从Facebook获取坐标到地点的坐标,这些坐标有时最多有12位小数。将它们转换为int(* 1E6)时,我正在放弃精确度,因为它正在删除一些数字。转换为int时坐标不准确

例如,双59.313732591172表示为INT 59313732.

我怎样才能保持准确性?有什么办法可以在Android上做到这一点?使用GeoPoint类我似乎坚持int。

迈克

+0

嗨迈克这似乎很奇怪,你想将你的位置转换为int ... double会比int更准确。你能解释为什么你需要它作为一个int吗? – travega 2011-04-25 22:51:04

+0

尽管事实上十二进制数是非常精确的......我没有做数学,但我想1E6应该精确到一两米......当然这是必要的吗? – WarrenFaith 2011-04-25 22:54:07

+0

@travega:我使用的Google Maps API有一个名为GeoPoint的类,用于查找位置:http://code.google.com/intl/sv/android/add-ons/google-apis/reference /com/google/android/maps/GeoPoint.html它只需要int作为参数。关于网络上每次讨论关于使用* 1E6将double转换为int的讨论,但我遇到了一些问题。 – Mike 2011-04-26 16:24:23

回答

1

int只能包含整数,所以您会看到您要求的行为。

59.313732591172 * 1E6 = 59313732.591172 

(int)59313732.591172 = 59313732 

如果您需要保留更多的数字,要么继续使用双,转换成long而不是int,并通过一个更大的数字乘以(例如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 2011-04-26 16:32:30

+0

啊。糟糕的Google。在投射到int之前添加0.5可能是你可以做的最好的(右上/下)。作为一个便笺,当我使用Facebook事件时,我发现查找街道地址似乎比使用GPS引用更准确。也许他们飙升数据以防止数据被窃取(由于这个原因,一些车载GPS系统已经污染了地图)。然而,一个粗略的计算表明一个微尺度精确到10厘米(Circumfence km * 1000 /(360x1e6)),所以我会听沃伦。将问题编辑为专注于GeoPoint以避免在评论中重复自己,这将是一件好事。 – 2011-04-26 23:20:54

+0

非常感谢,我会编辑这个问题。 – Mike 2011-04-27 16:47:10

0

int太短了一些数字(实际上,对于大多数的数字),因为它只有32位。改为使用long。请参阅here