int型乘以float型結果为何小了,请教各位。
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
int main(){
int a = 10;
int b = 10;
float cc = 2.6;
float dd = 2.4;
int x = (cc*a);
int y = b*dd;
printf("x=%d,y=%d\n",x,y);
return 0;
}
如上程序,为什么我用2.4*10得到的int值是24,而用2.6*10得到的int值却是25,而不是26?
[解决办法]
cc的值是2.59999999,这转为整数将是25
[解决办法]
这个精度的误差被你放大了而已。
[解决办法]
float cc = 2.6,其内部可能是2.59999999,相乘的结果就是25.9999999,取整就是25了
[解决办法]
int x = (cc*a);//2.5999999*10 int y = b*dd;//2.4000001*10
[解决办法]
VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编并单步执行一遍不就啥都明白了吗。
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编并单步执行。)
[解决办法]
用10进制小数不能精确表示某些三进制小数0.1(3)=0.33333333333……(10)
同理,用二进制小数也不能精确表示某些10进制小数。
[解决办法]