65,202
社区成员




ifstream fin;
fin.open("vertex.txt");
char *p1=new char[255];
char *p2=new char[255];
char *p3=new char[255];
while(true)
{
fin.getline(p1,255,'\n');
fin.getline(p2,255,'\n');
fin.getline(p3,255,'\n');
double xnum=atof(p2);
double ynum=atof(p3);
}
其中获取的p2为:113.177230145951
p3为:23.4761739216854
用atof函数转换的时候p2的转换时正确的113.17723014595100,p3转换就出问题了,变为23.476173921685401,最后一位变为1??这个是哪里的问题,要怎么改??
int main()
{
double d=23.4761739216854;
char str[20]; // 适当的大小
sprintf(str,"%.13f\n",d);
return 0;
}
int main()
{
double d=23.4761739216854; // 映射到一个浮点值
// 该值的编码为
// 40 37 79 e6 88 bc d8 cc
//
// 折算成十进制就是
// 23.476173921685401
//
// 而紧挨它的两个浮点值的编码分别是
// 比它小一点点的
// 40 37 79 e6 88 bc d8 cb
// 和比它大一点点的
// 40 37 79 e6 88 bc d8 cd
// 编码的其它位都一样,只有最低位分别是cb/cc/cd
// 折算成十进制分别是
// 23.476173921685398
// 23.476173921685405
// 再把这三个数排在一起
// 23.476173921685398
// 23.476173921685401
// 23.476173921685405
// 看到了吧,你所需要的
// 23.476173921685400
// 在这个数列里并不存在,只能映射一个最接近的给你
//
// 不管你要不要最后两位,它都在那里,只是你可以假装看不见
printf("%.15f\n",d);
printf("%.13f\n",d); // 假装看不见
return 0;
}
#define MIN_DIF 0.00000001
float a = 13.45;
float b = 13.45000000000001;
if(a - b < MIN_DIF && a - b > -MIN_DIF)
{
cout<<"a equals b"<<endl;
}