当前位置:编程学习 > wap >>

QList中的数值比较

下面这个程序,我该怎么判断是否有数大于2.0呢,如果有这样的数qDebug输出2,如果没有则输出1

#include <QtCore/QCoreApplication>
#include <QtDebug>
QList<float>m_listX;
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    FILE *fp;
    fp=fopen("D:/20130508/10/001.txt","rb");
    float fx;
    fx=0.0;

    while( !feof( fp ) )
     {

       fread(&fx,sizeof(float),1,fp);
       m_listX.append(fx);

     }

     for(int m=0;m<m_listX.size();m++)
              {

              qDebug()<<m_listX.at(m);
              }

              fclose(fp);

    return a.exec();
}
现在显示在控制台的数的一部分为3.09294
                              1.08706
                              3.05412
                              1.11294
                              2.92471
                              .......
这些都是文件中的数,诸如此类很多数,我试了几次自己判断,但得到的结果不对,请教大家帮我解决一下,非常感谢! --------------------编程问答-------------------- 你数值都可以取到打印出来,怎么不能比较呢 --------------------编程问答-------------------- 浮点数比较,要自己定义一个精度。比如 
float precision = 0.0005;
if( x - 2.0 <precision ) --------------------编程问答--------------------
引用 1 楼 xiuxianshen 的回复:
你数值都可以取到打印出来,怎么不能比较呢

可是我比较的结果不对,明明有大于2的,应该输出2,可是输出的是1 --------------------编程问答--------------------
引用 2 楼 hai200501019 的回复:
浮点数比较,要自己定义一个精度。比如 
float precision = 0.0005;
if( x - 2.0 <precision )

恩恩,好的,那我试试看,谢谢 --------------------编程问答-------------------- 浮点数不能直接比较 --------------------编程问答--------------------
引用 2 楼 hai200501019 的回复:
浮点数比较,要自己定义一个精度。比如 
float precision = 0.0005;
if( x - 2.0 <precision )

还是不对呢,不同的文件有的对,有的错,该怎么解决呢 --------------------编程问答--------------------
引用 5 楼 heksn 的回复:
浮点数不能直接比较

那我该怎么办呢,求解答,谢谢 --------------------编程问答-------------------- 下下策:
既然楼上大神说了浮点数不能直接比较(有待考证),那可以换个思路哈:
你需要的仅仅是跟2.0进行比较,那么不妨把所有数乘以1000000(如果你读的数据小数位不超过6位),然后再转换成整型,再跟2000000进行比较大小就OK了 --------------------编程问答-------------------- 我试了下:
float array[] = {1.12121, 2.00001, 1.99999, 2.12342};
    int size = sizeof(array)/sizeof(float);
    for(int i=0; i <size; ++i){
        if(array[i] < 2.0){
            qDebug() <<1;
        }else{
            qDebug() <<2;
        }
    }

输出结果是:1 2 1 2
没错呀,你给一组测试数据看看 --------------------编程问答--------------------
引用 8 楼 hqw19881118 的回复:
下下策:
既然楼上大神说了浮点数不能直接比较(有待考证),那可以换个思路哈:
你需要的仅仅是跟2.0进行比较,那么不妨把所有数乘以1000000(如果你读的数据小数位不超过6位),然后再转换成整型,再跟2000000进行比较大小就OK了

恩恩,好的,我试试你说的,我昨天自己把浮点型强制转换成整型了,都舍掉了小数位,就只能做大于等于这样比较了,不知道这么做可以不? --------------------编程问答--------------------
引用 9 楼 hqw19881118 的回复:
我试了下:
float array[] = {1.12121, 2.00001, 1.99999, 2.12342};
    int size = sizeof(array)/sizeof(float);
    for(int i=0; i <size; ++i){
        if(array[i] < 2.0){
            qDebug() <<1;
        }else{
            qDebug() <<2;
        }
    }

输出结果是:1 2 1 2
没错呀,你给一组测试数据看看

好的,非常感谢,我也这么试试!
补充:移动开发 ,  Qt
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,