void exchange(float *p ,float *q){
float a = *p;
*p = *q;
*q = a;
}
float a = 0;
float b = 0;
printf("请输入a = ");
scanf("%f",&a);
printf("请输入b = ");
scanf("%f",&b);
exchange(&a, &b);
printf("a = %f,b = %f", a, b);
为什么运行结果是这样:
请输入a = 559.4
请输入b = 66.4
结果:
a = 66.400002,b = 559.400024
没错啊。
记住:浮点数是有误差的。
估计是精度不够,都换成double试试。
不指定输出的精度的话,%f默认保留6位小数。浮点数存储的特点就是近似性,比如存储66.4可能内存中存储的是66.400002000。、
可以控制输出格式,比如%.1f保留1位小数。
浮点数本来就是有精度控制,它的大小都是一个范围,只是在你可以接收的精度范围下来处理它。
float 精度范围。
float 精度范围。
浮点数是有精度的,它存的是一个近似值,而不是绝对等于你所看到的值。