float 比较, 这是一个坑

为了方便随机关键产品数据,做了一个随机值列的方案,列字段类型设置为float。

在测试的两个随机值的时候, 故意设置了几个随机值相同保存到数据库表中, 这样问题就出来了。 详细如下: 当进行小于比较的时候,坑出现了

    select top 5 PartNo, [rand]  from PartNow where [rand] < 0.850106894857748 order by [rand] desc
![查询结果](https://f.cloud.github.com/assets/1181144/1445889/71649f6e-422c-11e3-81a4-0d9d2f1cac15.jpg)

这个查询结果真是不忍直视啊, 接着测试了大于和等于 ,大于比较一切正常,但是等于比较的结果也不忍直视啊, 完全没有出现任务数据。
    select top 5 PartNo,  [rand]  from Seo_PartNoWjw where [rand] = 0.850106894857748 order by [rand] desc

查询结果

看到这样的结果, 我和我的小伙伴都惊呆了。

索性项目中不需要比较相等,而表面上两个float的数字相同的随机值概率小之又小。

当需要遇到相等比较的随机值情况时,请珍惜生命,远离float。

写于 2013-12-21

posted @ 2016-12-20 11:34  青空feng  阅读(274)  评论(0编辑  收藏  举报