如题:
具体程序如下:
CString strs=_T("1.001");
double nYear=atof(strs);
nYear=nYear*1000;
strs.Format("%lf",nYear);
AfxMessageBox(strs);                //1001.00000
int aa=(int)nYear;
strs.Format("%d",aa);                  
AfxMessageBox(strs);                //1000 上面出来的结果只是1000;
我试了下,是上面的赋值语句int aa=(int)nYear;有问题。

解决方案 »

  1.   

    double nYear=atof(strs);
    改成:float nYear=atof(strs);
      

  2.   


    和这句关系不大的把。。atof()转换后就是double的我自己还这么试了下:
    double a=1001.0000
    int a1=(int)a;double a=1.001
    a=a*1000;
    int a1=(int)a;
    上面两段的幅值语句值不相等,一个是a=1001.一个是a=1000;
    真不知道哪里出问题了,有大牛遇见过这种现象么?
    我用的是VC6.0~
      

  3.   

    呵呵,你运行一下,就知道了!
    如果你用double ,那么nYear = 1000.99999999;
      

  4.   


    float a=1.001
    a=a*1000;
    int a1=(int)a;
    我改成上面这个样子,1.001是对了,1.002又不对了。现在我要做个校正系数的东西,输入浮点数,然后转化成int发给下位机,难道没办法了么?
    还是要像这样:
    float a=1.001
    a=a*1000+0.5;
    int a1=(int)a;总感觉不对啊
    各位大牛这种问题是怎么做的呢?用double的话,a=1.001~1.024之间的数据是不对的,别的都对,郁闷啊~~~
      

  5.   

    简单,用double
    #define JINGDU 0.000000001
    double a = 1.001+JINGDU;
    a = a*1000;
    int ia = a;
    你这样试试就没有问题了!
      

  6.   

    谢谢您了。
    我自己按照你说的,改为float,程序如下,下面的红颜色的语句必须要有,不然就不对,搞不来为什么;
    float nYear=(float)atof(strs);
    nYear=nYear*1000;
    nYear=nYear;     //若没有这一句,nYear=1.001的时候还是会出错,但是有了这句就O了
    int aa=(int)nYear;
    strs.Format("%d",aa);
    AfxMessageBox(strs);