mysql,在数据库中找到这个科学价值的问题

时间:2011-07-06 15:21:18

标签: mysql

我已将此值存储到mysql“1e-06”中的列中(以float类型存储)

当我使用“0.000001”搜索此值时,我没有匹配。有什么想法吗?

SELECT *
FROM `MATCH__DESTINATION`
WHERE `W_m` = 0.000001

3 个答案:

答案 0 :(得分:0)

从此mailing list thread

  
    

如果不在[t] eger中,则MySQL不会检测到相等的浮点数,左

         

浮动alwa [y] s大于右浮动es。 1.1> 1.1 =真。

         

mysql> SELECT * FROM float_bug WHERE f=1.1; Empty set (0.00 sec)

  
     

这是浮点运算的不精确性。使用DECIMAL类型   代替。

答案 1 :(得分:0)

尝试将匹配的列和值限制为等于小数精度,然后进行比较。

SELECT *
FROM `MATCH__DESTINATION`
WHERE Cast(`W_m` as Decimal(6,6)) = Cast(0.000001 as Decimal(6,6))

答案 2 :(得分:0)

你在做什么没有问题。 SELECT没有返回任何结果的唯一原因是因为没有匹配。有几件事:

  1. W_m是否允许浮动值最多6个小数位?

  2. 您确定表中确实存在这样的值吗?您是否可以尝试使用任何其他WHERE谓词来获取具有W_m为1e-06的相同记录?如果没有,是否可以在没有WHERE条件的情况下执行SELECT *,然后手动检查该记录是否确实存在?