我有这个声明:
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/