急救!!!c语言中 关于 double转int的精度问题

#include
#define TEXT 100000
int main()
{
double a=7.1,c=7.50,f=7.11;
int b,d,e;
b=a/0.1;
d=c/0.01;
e=f/0.01;
printf("%d\n%d\n%d\n",b,d,e);
return 0;
}
为什么结果和我想象的不一样啊,b,d不正常,但是e为什么又正常了阿???
求解阿!

c

5个回答

double转int是直接舍去尾数而不是四舍五入,因此对于将将好接近整数的浮点数转换,有可能会少1或者多1(负数),因为浮点数在进制转换和计算上存在误差。

qq_37749305
qq_37749305 噢噢,我去看了内存中的这些数,还真是跟你说的一样,double不能精准的表示小数,才导致这种结果的,谢谢阿
2 年多之前 回复

避免这种误差的办法一般是 +0.5 再取整,也就是四舍五入。

计算机精度的问题,比如说,double a = 1; double b = a / 2; 结果会是 b = 0.499999 等。

为什么啊?b=70,d=749,e=711 ????

类型转换,精度丢失,向下强转(为什么说向下呢,由于是字节数长的变短了,需要强转,而且字节数变少了,那就只能丢掉一部分了)
向上的话,会默认转换,小房子搬到大房子,总是有很多空间的,大房子般小房子,就不得不扔掉一些东西。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!