Ruby on rails 在RubyonRails中,如何将数字强制到小数点后10位?

Ruby on rails 在RubyonRails中,如何将数字强制到小数点后10位?,ruby-on-rails,ruby,Ruby On Rails,Ruby,我的数据库中的纬度和经度值精确到小数点后10位: +----+---------------+-----------------+ | id | lat | lng | +----+---------------+-----------------+ | 55 | 34.4208305000 | -119.6981901000 | | 56 | 30.2671530000 | -97.7430608000 | self.lat => 30.2

我的数据库中的纬度和经度值精确到小数点后10位:

+----+---------------+-----------------+
| id | lat           | lng             |
+----+---------------+-----------------+
| 55 | 34.4208305000 | -119.6981901000 |
| 56 | 30.2671530000 |  -97.7430608000 |
self.lat => 30.267153
我需要在db中查询匹配项,但我当前的变量是一个只有6位小数的浮点:

+----+---------------+-----------------+
| id | lat           | lng             |
+----+---------------+-----------------+
| 55 | 34.4208305000 | -119.6981901000 |
| 56 | 30.2671530000 |  -97.7430608000 |
self.lat => 30.267153
如何将我的浮点值转换为具有额外的小数位数,以便获得匹配

myloc = Marker.where("lat = ?", self.lat)
我看过十进制和大十进制文档。这些是最好的方法吗

Ruby 1.8.7,Rails 3。谢谢您的建议。

您可以尝试以下方法:

"%.10f" % self.lat
您可以使用(或者更简单的兄弟)将浮点数格式化为10位小数的字符串:

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

不过,我觉得这有点可疑;lat和lng柱属于哪种类型的字段?您正在使用什么RDBMS?您真的想精确地比较浮点值吗?您真的想将它们存储为字符串吗?

很酷-很好-谢谢。是mysql。lat/lng字段定义为十进制类型(15,10)。这是一种特殊情况,在存储新标记之前检查重复的位置,这样我就不会让标记彼此重叠——这就是精确的比较。我很确定Phrogz的观点是,比较浮点值是否相等通常是不明智的。感谢你指出这一点,我现在明白了。我会仔细考虑并做一些测试。