读书人

int型乘以float型果为何小了

发布时间: 2012-10-18 13:46:56 作者: rapoo

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了
[解决办法]

C/C++ code
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进制小数。

[解决办法]
探讨
C/C++ code


int x = (cc*a);//2.5999999*10
int y = b*dd;//2.4000001*10

[解决办法]
探讨

既然大家都说float cc = 2.6,其内部可能是2.599999,那我怎么做,才能得到我想要的值呢?2.6*10=26.
再者,float dd = 2.4其内部为什么不是2.399999?

[解决办法]
探讨

既然大家都说float cc = 2.6,其内部可能是2.599999,那我怎么做,才能得到我想要的值呢?2.6*10=26.
再者,float dd = 2.4其内部为什么不是2.399999?

[解决办法]
一个float或者double如果要向上取整,那么就将它加0.5,然后再转型为int即可。

读书人网 >C语言

热点推荐