如何用rails在mysql数据库中查找浮点值

aij0ehis  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(285)

假设我有一个rails模型叫做 Position 那两列呢 latitude 以及 longitude (两者都定义为浮动)。我用一些位置值填充了模型。现在我试着根据纬度来确定位置:

positions = Position.where('positions.latitude = ?', 50.0)

返回nil。即使我试过这个:

lat = Position.first.latitude
positions = Position.where('positions.latitude = ?', lat)

结果是零。我的数据库是mysql用于生产。上面的代码是开发中的单词(sqlite)。我的假设是它与数据类型的处理方式有关,但我不明白。有人有什么想法吗?

4bbkushb

4bbkushb1#

不要使用 FLOAT 或者 DOUBLE 当你需要精确的数值时。
阅读https://dev.mysql.com/doc/refman/8.0/en/problems-with-float.html
相反,使用 DECIMAL 或者 NUMERIC (它们是同义词)。
看看我应该如何准确地存储纬度和经度?对于一些具体的指导 DECIMAL 用于纬度和经度的精度。

ugmeyewa

ugmeyewa2#

这也许是因为 浮点数表示。用普通的相等比较法是不可能比较它们的。与其检查精确匹配,不如先检查数字是否在某个范围内,或者在比较之前将两个数字四舍五入到某个精度。
关于地理坐标的具体例子(我假设这是因为 纬度 我建议使用 十进制的 列类型而不是 浮动。
如果你想坚持 floatcolumn,我建议检查值是否在某个范围内。

相关问题