以下是引用w823352417在2012-10-4 23:28:04的发言:
printf("f=%15.6f,g=%15.12f\nm=%d,n=%ld\np=%u,q=%u\n",f,q,m,n,p,q);
这样你会惊奇的发现g后面的数都错了位,n,p,q,向前都错了一位。最后,q的没有了,只能是0;
现在问题出在q,m。感觉这两个值好像合并了?
现在换成f,12345678901,m,(一个11位的数)发现结果正常。
再换成f,1234567890,m,(10位)又变回去了!
现在把g=%15.12f换成g=%f,发现上诉两种结果一样。
再看一个例子: printf("%f,%d\n",9,12);结果是异常。两个都是0;将9换成10位以上的数字,又正常。
所以我认为一个非浮点数用浮点数的方法输出时不能转化,如果该非浮点数小于10位,系统会默认提取下一位(即该非浮点数右边逗号右边的一个数)。
有一点错了,sizeof(double)=8;是提取一个8个字节的数(和位没关系)。sizeof(1234567890)=4;sizeof(12345678901)=8;sizeof(9876543210)=8;