sql-server - float sql server 转换问题

标签 sql-server

我有这个声明:

Select STORE_NAME,STORE_LATITUDE,STORE_LONGTITUDE
 from stores 
  where STORE_LATITUDE=24.6669863852163
         and STORE_LONGTITUDE=46.69189453125

这个语句应该返回一行,我很确定我在数据库表中输入了正确的纬度和经度,但它返回空值而不是我正在寻找的商店,但我找不到我的错误 STORE_LATITUDE,STORE_LONGITUDE 被声明为 float

最佳答案

浮点值本质上是近似值。真的很难让他们比较平等;关于“手榴弹和马蹄铁的接近计数”的古老格言也适用于浮点计算。

我想说的是,您永远无法可靠地测试 float 之间的相等性。

您需要这样的查询:

 Select STORE_NAME,STORE_LATITUDE,STORE_LONGTITUDE
   from stores 
  where STORE_LATITUDE BETWEEN 24.6669863852163 - 0.0001
                           AND 24.6669863852163 + 0.0001
    AND STORE_LONGTITUDE BETWEEN 46.69189453125 - 0.0001
                             AND 46.69189453125 + 0.0001

顺便说一下,0.0001 度的纬度相当于地面上大约 11 米。您的商店位置不太可能接近那个准确度,因为这就是地球形状的球形假设开始分崩离析的地方。

像 24.6669863852163 这样的纬度基准的精度大约为 11 纳米,或者复杂碳水化合物分子或类似分子的大小。这对于分子生物学来说很酷,但对于商店搜索者来说显然有点过头了。

关于sql-server - float sql server 转换问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17442741/

相关文章:

mysql - SQL "replace"语法问题

c# - ADO 异步查询超时

sql - 如何防止 'query timeout expired' ? (SQLNCLI11 错误 '80040e31' )

sql - 估计的子树成本大幅下降,糟糕的优化

php - 更有效地在彼此内部编写 SQL 行语句

javascript - React JS MSSQL 拒绝导入 mssql

asp.net - 整数零, "0' 上传到 SQL Server 时将被忽略

c# - 该列在选择列表中无效,因为该列未包含在聚合函数或GROUP BY子句中

sql-server - 隔离级别 - 可串行化。我什么时候应该使用这个?

sql-server - Visual Studio 2012 的数据库项目是否存在?