2011-02-11 66 views
15

我有我的数据库纬度和经度值了小数点后10位:如何在Ruby on Rails中将数字强制为10个小数位?

+----+---------------+-----------------+ 
| id | lat   | lng    | 
+----+---------------+-----------------+ 
| 55 | 34.4208305000 | -119.6981901000 | 
| 56 | 30.2671530000 | -97.7430608000 | 

我需要查询数据库进行匹配,但我目前的变量,只有6位小数浮动:

self.lat => 30.267153 

如何将我的浮点数转换为具有额外的小数位数,以便获得匹配?

myloc = Marker.where("lat = ?", self.lat) 

我见过十进制和BigDecimal文档。这是最好的方法吗?

Ruby 1.8.7,Rails 3.感谢您的任何建议。

回答

25

您可以使用sprintf —或者是简单的哥哥String#% —格式化你的浮点数与10位小数的字符串:

f = 30.267153 
s = "%0.10f" % f 
#=> "30.2671530000" 

这似乎腥对我来说,虽然;你的lat和lng列有哪些类型的字段?你使用的是什么RDBMS?你真的想要精确地比较浮点值吗?你真的想把它们存储为字符串吗?

+0

酷 - 工作 - 谢谢。这是MySQL。 lat/lng字段被定义为十进制类型(15,10)。这是一个特殊的情况,在存储新标记之前检查重复的位置,这样我就不会将标记放在彼此的顶部 - 因此可以进行准确的比较。 – heyrolled 2011-02-11 23:05:13

7

你可以试试这个:

"%.10f" % self.lat 
相关问题