我的代码是这样的:
取m1小数点后的第m2位并在第m2位后一位四舍五入
    double ten,m1;
    int m2
    ten=pow(10,m2);
    m1=m_edit1*ten+0.5;
    m1=int(m_edit1)/ten;我用其它的数测试都没有问题可是在测试同m1=4.225 m2=2时运算后竟然m1的值是4.22
但是用其它的数得出来的值都是正确的.太奇怪了.

解决方案 »

  1.   

    最后一句不明白
    m1 = int(m1)/ten?
      

  2.   

    m1=m_edit1*ten+0.5;
    m1=int(m_edit1)/ten;
    上面这两句话,你到底想干什么?怪哉!
      

  3.   

    是挺奇怪的,测试了以下,不止是4.225 &2   3.225&2  2.225&2   7.2225&3  6.22225&4类似格式的都不可以,不知道是不是一个BUG,如果是的话楼主该出名了!
      

  4.   

    支持 m1=int(m_edit1/ten);
      

  5.   

    支持 m1=int(m_edit1/ten);
    如果这样的话还能取到小数点后边的尾数么? 狂汗~~~~
      

  6.   

    m1=int(m_edit1)/ten
    ============================>
    m1 = int(m1/ten);
      

  7.   

    double ten,m1;
    int m2
    ten=pow(10,m2);
    m1=m1*ten+0.5;
    m1=int(m1)/ten;
      

  8.   

    倒数第二行写错l ,m1 ---〉m_edit1
      

  9.   

    double ten,m1;
        int m2
        ten=pow(10,m2);
        m1=m_edit1*ten+0.5;
        m1=int(m1)/ten;
    benxudong() 说的倒数第二行写错l ,m1 ---〉m_edit1是我拷错了。
    int(m1)的目的是为了取整,我换了floor去掉尾数,可是还是4.225有问题,真的是不应该呀。  
      

  10.   

    在测试的时候要加上math.h这个头文件。
      

  11.   

    m1=int(m_edit1)/ten
    ============================>
    m1 = int(m1/ten);
    119365374(砖头
    这们的话怎么就取不到小数了.你还没看懂我上面写的意思吧!!!我是想取指定位数的小数.
      

  12.   

    m1=int(m_edit1)/ten
    ============================>
    m1 = int(m1/ten);------------------
    原程序按正常理解应该是正确的,
     //此时,m1=423.000000000
    m1=int(m_edit1)/ten;//相当于m1=(int)423.00000000/100
    // 但执行后,m1=4.22,因为浮点的精度引起
    ============================>
    ------------------
    这样也不正确,
     //此时,m1=423.000000000
    m1=int(mt1/ten);//相当于m1=(int)(423.00000000/100.0);
    // 执行后,m1=4.000000000
      

  13.   

    这个你要的圆整指定小数位(或左或右)
    强制转换并不等于是圆整.
    math.h里没有提供Round函数,以前我都是取double的字串和它的小数位自已ROUND
    再转换回去.
    现在都用SDK.API VarR8Round.
    原型:
    HRESULT VarR8Round(    double    dblIn,           int       cDecimals,    double *  pdblResult);
    别的不用我说了吧
      

  14.   

    首先告诉你:double型数值是双精度型的,不可能只有2位或者3位数据,因此如果你题目要让一个double变量显示2位那是不可能的.他是有精度的.
    分析你的代码:
    你可以看单步执行一下,
    m_eidt1 = 4.225,其实他显示的不是这个具体的4.225,而是4.2249999999999996,按照你的程序乘100后等于422.499..96, 再加上0.5后是422.9999...96拉,你再取整肯定是422,如果再与ten这个double型的数据相除,又转化成double型,421.9999..99,因此你最后的数据=422是正确的.
      

  15.   

    m1=int(m_edit1)/ten;
    改为------>
    m1=floorf(m1)/ten;
    即可得正确结果4.230000,可能是int取整的问题------------------
    没有测试负数的情况,
    烦请把您最后写好的函数贴出来
      

  16.   

    我想给 :imzhjy(无罪)和benxudong() 加分可是只能加一个,就先给benxudong() 加了,谢谢无罪了!!!!!!!!!