如何使用 rails 在 mysql 数据库中查找浮点值
how to find float values in mysql database with rails
假设我有一个名为 Position
的 rails 模型和两列 latitude
和 longitude
(均定义为浮点数)。我用一些位置值填充了模型。现在我试图根据它的纬度找到位置:
positions = Position.where('positions.latitude = ?', 50.0)
returns 无。
即使我尝试这样做:
lat = Position.first.latitude
positions = Position.where('positions.latitude = ?', lat)
结果为零。我的数据库 mysql 用于生产。上面的代码在开发中(sqlite)。我的假设是它与数据类型的处理方式有关,但我不明白。有人有什么想法吗?
这可能与浮点数的表示方式有关。不可能使用正常的相等比较来比较它们。与其检查精确匹配,不如检查数字是否在一个范围内,或者在比较它们之前将两个数字四舍五入到一定精度。
关于带有地理坐标的特定示例(我假设这是因为使用了纬度),我建议使用小数列类型而不是浮点数。
如果您想坚持使用 floatcolumn,我建议您检查该值是否在一个范围内。
当您需要精确的数值时,不要使用 FLOAT
或 DOUBLE
。
阅读https://dev.mysql.com/doc/refman/8.0/en/problems-with-float.html
而是使用 DECIMAL
或 NUMERIC
(它们是同义词)。
请参阅 How accurately should I store latitude and longitude? 以获取有关用于纬度和经度的特定 DECIMAL
精度的一些指导。
假设我有一个名为 Position
的 rails 模型和两列 latitude
和 longitude
(均定义为浮点数)。我用一些位置值填充了模型。现在我试图根据它的纬度找到位置:
positions = Position.where('positions.latitude = ?', 50.0)
returns 无。 即使我尝试这样做:
lat = Position.first.latitude
positions = Position.where('positions.latitude = ?', lat)
结果为零。我的数据库 mysql 用于生产。上面的代码在开发中(sqlite)。我的假设是它与数据类型的处理方式有关,但我不明白。有人有什么想法吗?
这可能与浮点数的表示方式有关。不可能使用正常的相等比较来比较它们。与其检查精确匹配,不如检查数字是否在一个范围内,或者在比较它们之前将两个数字四舍五入到一定精度。
关于带有地理坐标的特定示例(我假设这是因为使用了纬度),我建议使用小数列类型而不是浮点数。
如果您想坚持使用 floatcolumn,我建议您检查该值是否在一个范围内。
当您需要精确的数值时,不要使用 FLOAT
或 DOUBLE
。
阅读https://dev.mysql.com/doc/refman/8.0/en/problems-with-float.html
而是使用 DECIMAL
或 NUMERIC
(它们是同义词)。
请参阅 How accurately should I store latitude and longitude? 以获取有关用于纬度和经度的特定 DECIMAL
精度的一些指导。