2011-02-11 38 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 
相關問題