Ruby on rails 在RubyonRails中,如何将数字强制到小数点后10位?
我的数据库中的纬度和经度值精确到小数点后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
+----+---------------+-----------------+
| 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的观点是,比较浮点值是否相等通常是不明智的。感谢你指出这一点,我现在明白了。我会仔细考虑并做一些测试。