这是10进制数据变2进制float型内存数据,再由内存2进制 数据转10进制数据 输出过程中,32位字长截断误差引起的。
float 有效数字精度,只有6-7位10进制数位,21.290001 有8位,所以 最后一个1是不可靠的。 你可以用 %g 格式输出,或输出时限定小数位数。
因为a是float型,在使用printf函数时,正确的格式应该是%f,而你却使用了%d的打印格式,首先就导致了输出错误,因此导致了后面一系列的系统输出错误,如果你将
printf("%d,%f,%lf,%e",(int)a,a,a,a);的话,那就不会出问题
我会先怀疑没有rebuild到, 结果是旧的; 我实测不会这样.