我有以下的情况,让我27,而不是28:转换双为int误差(1个关)
double d = 0.35;
int i = 80;
int ans = (int)(d * i);
printf("%d", ans);
但我得到正确的答案,如果我用这个:
int ans = (int)(0.35 * 80);
printf("%d", ans);
或:
double ans = d * i;
printf("%d", (int) ans);
有人可以解释为什么第一种情况是1个关和其他人的工作?
我做了一些研究和人说双存储数字,如28 27.999 ...,但我很困惑,在什么情况下,这会发生。Britain
谢谢!
你的问题是关于C,而不是C++。至于问题本身,我无法重现你的问题。在gcc(Ubuntu 4.8.1-2ubuntu1〜12.04)上的所有三种情况下,我得到了28分。 – DyZ
[我尝试在ideone中,它返回28](https://ideone.com/6J4yMm)。你使用的是什么编译器和平台? – AntonH
有帮助的阅读:[每个计算机科学家应该知道的关于浮点运算的内容](https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html) – user4581301