用于存储谷歌地图纬度和经度值的正确数据类型?

时间:2011-03-10 17:22:53

标签: grails groovy

...我有一个Grails域类,用于处理与谷歌地图交互的地理位置数据:

    Float latitude
Float longitude

将以下值保存到db:

纬度:2.5485291419153366,经度:-76.03939712047577

我最终得到:2.54853; -76.0394。 在这种情况下,保留初始值的最佳方法是什么?

先谢谢

3 个答案:

答案 0 :(得分:7)

另一种选择是将它们存储为字符串。我知道这看起来很奇怪,但您可能只是将值传递回地图API而不是自己进行任何实际计算。如果是这种情况,字符串很容易。仅仅因为某些东西是数字,并不意味着它必须存储在数字数据类型中。

答案 1 :(得分:2)

您可能想要使用BigDecimal。当您可以使用BigDecimal控制位数时,浮点数不会保证100%有效。 Grails没有为此提供约束,因此您必须使用setScale方法来确定要存储的位数。有关更多信息,请参阅 http://download.oracle.com/javase/1.5.0/docs/api/java/math/BigDecimal.html

答案 2 :(得分:2)

......最后这就是我决定采用的方式:

BigDecimal latitude
BigDecimal longitude

static constraints = {
  latitude( scale : 16 )
  longitude( scale : 16 )
}