今天一位刚进公司不久的PHP的同事出了一道题,我答错了,很是得意。我在公司可能算经验比较丰富、比较有资历的吧,所以能出道我打错的题,可能认为是一件值得骄傲的事情,估计公司里面有这样变态心理的同事不止他一个。不过看淡就好,因为知道自己目标是什么?想要什么?其他的就不是很重要了。
我们来看看这道题:
(int)((0.1+0.7)*10)
这道题我一看最初直接认为答案应该是0。因为以为小数直接取整再乘就为0了,但是0.1+0.7还有个括号啊,所以答案0是错误的。那么答案是多少呢?
我们在eclipse输出的一下,居然输出的是7.我们直接分析一下,因为寄存器的关系,0.1最终存储的二进制是0.09999,而0.7二进制存储的是0.69999,所以2个加起来是0.79998的样子,再和10相乘,那么这个计算结果再被强制int了就为7了。OK,到这里原来终于明白了,看来这是一道比较深的题,要知道到计算机底层原来才看的透。那么小数比如0.1为什么存的是0.09999呢?因为小数不能被2整除,所以一直为9999存储。好了,道理讲出来就简单了。