添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
考研的绿豆  ·  《Effective ...·  3 月前    · 
急躁的冰棍  ·  190813-Influx ...·  4 月前    · 
double bbb=3.3922; double aa=QString::number(aaa,'f',1).toDouble(); double bb=QString::number(bbb,'f',1).toDouble(); qDebug()<<"aa="<=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()<<"通过判断条件";

打印信息如下:

暂时这样解决。。。

浮点数在计算机中并不能精确的表示,所以在 判断 两个 double类型 的数时需要其他的手段,而不是直接用== 判断 。 float, double 分别遵循R32-24,R64-53的标准。所以float的精度误差在1e-6; double 精度误差在1e-15,所以要 判断 一个单精度浮点数:则是if( abs(f) <= 1e-6);要 判断 一个双精度浮点数:则是if( abs(f) <= 1e-15 );若小于,为0,大于,不为0 。 自己最好的是选择一个合适的精度,来进行 判断 计算机 判断 两个数相等,将 判断 所有的二 进制 位是否相等,当所有的位都相等时,两个数才相等,绝对的相等。 解决方法: 万物没有绝对相等的概念,在我们的程序中:对小数来说,保留 小数点 后几位就足够了,因此两个小数的差在可接受的精度范围内就可以被认为是相等的。 # qt 5写法 public bool equal( double a, double b) { if ((a- b> -0.000001) && (a- b) < 0.000001)
判断 两个 double 型是否相等,不能用 判断 int型的方法去比较,这也是对初学者容易出现的错误,刚开始我在做PUK1730那个题目时候,就犯了这样的毛病。做出来的答案总是错的。 因为我用 double a, double b,if(a==b)...这样就是错的,后来在网上看了别人的代码才知道,比较两个 double 型:fabs(a-b)<=eps,(eps=1e-9),eps的值是起到精确度的作用...
其中QFuzzyIsNull是浮点型与零值的比较函数,QFuzzyCompare是两个浮点型数据的比较函数。 函数原型如下: [static] bool qFuzzyCompare( double p1, double p2) [static] bool qFuzzyCompare(float p1, float p2) [static] bool qFuzzyIsNull( double d) [static]
首先给出一个场景:我们编写了一个 Qt 界面,然后需要输入一个 double 值,最后要从文件中写出来。所面临的问题:要保证用户输入的值是 Double类型 ,并且保证输出的精度和用户的一致。解决办法:最简单的一种方法是利用QInputDialog,获取一个 double ,然后在lineEdit中显示,最后保存到文件中。 代码如下: //获取数字 number = QInput
由于计算机中数据的存储到最底层,只有1和0,所以会有一个精度的问题。 我们在比较浮点数的时候,在A>B或者A<B的时候,我们可以正常用大于号(>)或者小于号(<)进行比较; 但是我们在 判断 两个浮点数是否相等的时候,则不能直接用==号进行比较,因为这样会有风险 那么如何安全的进行浮点数的比较呢,就用到了 Qt 的一个方法bool qFuzzyCompare( double p1, double p2),使用方法如下: double value1 = 5.323285194326;
浮点数之间的等值 判断 ,基本数据类型不能用==来比较,包装数据类型不能用equals来 判断 。 浮点数采用“尾数+阶码” 的编码方式,类似于科学计数法的“有效数字+指数” 的表示方式。二 进制 无法精确表示大部分的十 进制 小数,具体原理参考《码出高效》 float a = 1.0f - 0.9f; float b = 0.9f - 0.8f; if (a == b) { // 预期进入此代码快,执行其它业务逻辑 // 但事实上 a==b 的结果为 false Float x = Float.valu