如题:
具体程序如下:
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;有问题。
具体程序如下:
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;有问题。
改成:float nYear=atof(strs);
和这句关系不大的把。。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~
如果你用double ,那么nYear = 1000.99999999;
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之间的数据是不对的,别的都对,郁闷啊~~~
#define JINGDU 0.000000001
double a = 1.001+JINGDU;
a = a*1000;
int ia = a;
你这样试试就没有问题了!
我自己按照你说的,改为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);