1. 程式人生 > 其它 >qt之double型別判斷

qt之double型別判斷

技術標籤:qt判斷bugqt double進位制bugqt小數點7的bugbug

一、前言

double型別不能判斷相等,那麼如何判斷等於呢,見下文,腦瓜子疼啊,以為時bug,結果還是基礎犯了錯誤。。

二、環境

windows10

qt57

三、正文

double型別的浮點數,保留一位之後,用變數做判斷條件

測試程式碼:

        double aaa=5.1234;
        double bbb=3.3922;
        double aa=QString::number(aaa,'f',1).toDouble();
        double bb=QString::number(bbb,'f',1).toDouble();
        qDebug()<<"aa="<<aa<<";bb="<<bb<<";aa-bb="<<aa-bb;
        if((aa-bb)>=1.7)
            qDebug()<<"通過判斷條件";

列印資訊如下:

沒有進入if語句列印資訊

修改判斷結果和對應條件之後程式碼如下:

        double aaa=5.0234;
        double bbb=3.3922;
        double aa=QString::number(aaa,'f',1).toDouble();
        double bb=QString::number(bbb,'f',1).toDouble();
        qDebug()<<"aa="<<aa<<";bb="<<bb<<";aa-bb="<<aa-bb;
        if((aa-bb)>=1.6)
            qDebug()<<"通過判斷條件";

列印資訊如下:

進入了判斷條件

就是判斷條件有7的時候,判斷條件為double型別被轉換位數之後,又經過再次運算,就會判斷失敗,其他數值正常。

解決方法如下:

        double aaa=5.1234;
        double bbb=3.3922;
        double aa=QString::number(aaa,'f',1).toDouble();
        double bb=QString::number(bbb,'f',1).toDouble();
        double ccc=aa-bb;
        double cc=QString::number(ccc,'f',1).toDouble();//重新處理,否則判斷異常
        qDebug()<<"aa="<<aa<<";bb="<<bb<<";cc="<<cc;
        if(cc>=1.7)
            qDebug()<<"通過判斷條件";

列印資訊如下:

暫時這樣解決。。。

四、結語

坑爹啊