C语言中double转成int的问题

我是在visual studio下写的。
double a;int b;int c;a=1234.56;b=(int)a;
c=(a-b)*100 为什么c是55而不是56

因为无论是double还是int都是二进制储存,在二进制小数转换成十进制很容易出现误差导致问题,改成下面代码就看得出:
int main()
{
double a;
int b;
int c;
a=1234.56;
b=(int)a;
a=a-b;//这里a=0.5599999999
c=(int)(a*100);//55.99999999转换成int时,小数直接去掉,所以是55

return 0;
}追问

为什么a是0.5599999999?

追答

二进制转换成十进制时就会出现这种问题,一般都是换成整数计算

追问

是否可以理解为因为0.559999(9无限循环)和0.56相等,浮点数在计算机中都是近似表示值?我感觉我似乎有点知道了但是具体不是很了解,请问哪些书上会有这块内容啊?我都没有看到过诶。

追答

你去了解一下二进制与十进制的转换就明白了,十进制小数转换成二进制不一定会转换成有限小数

追问

好的,谢谢!

温馨提示:答案为网友推荐,仅供参考
相似回答