qt之double型別判斷
阿新 • • 發佈:2021-02-16
技術標籤: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()<<"通過判斷條件";
列印資訊如下:
暫時這樣解決。。。
四、結語
坑爹啊