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

how to find float values in mysql database with rails

假设我有一个名为 Position 的 rails 模型和两列 latitudelongitude(均定义为浮点数)。我用一些位置值填充了模型。现在我试图根据它的纬度找到位置:

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

returns 无。 即使我尝试这样做:

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

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

这可能与浮点数的表示方式有关。不可能使用正常的相等比较来比较它们。与其检查精确匹配,不如检查数字是否在一个范围内,或者在比较它们之前将两个数字四舍五入到一定精度。

关于带有地理坐标的特定示例(我假设这是因为使用了纬度),我建议使用小数列类型而不是浮点数。

如果您想坚持使用 floatcolumn,我建议您检查该值是否在一个范围内。

当您需要精确的数值时,不要使用 FLOATDOUBLE

阅读https://dev.mysql.com/doc/refman/8.0/en/problems-with-float.html

而是使用 DECIMALNUMERIC(它们是同义词)。

请参阅 How accurately should I store latitude and longitude? 以获取有关用于纬度和经度的特定 DECIMAL 精度的一些指导。