在Python中(其他语言中也存在这个问题,这是计算机采用二进制导致的),有时候由于二进制和十进制之间对应问题会导致数值的精度问题,比如无法用有限个二进制位完整地表示0.1,因为0.1转化为二进制之后位一个无限循环小数。如下图所示:
>>>1.1*2.2
2.4200000000000004
而
>>>print 1.1*2.2
2.42
这说明Python内部在将float类型转换为字符串时做了一些检测,从而忽略了后边的零。具体的实现原理还有待继续探究。在CodeWar的Caculator题目中,本来使用eval()函数就能极好地解决这道题,然而由于精度问题导致无法通过Test,如下所示:
>>>eval('1.1*2.2*3.3')
7.986000000000001
经过上面的提醒,改为
>>>float(str(eval('1.1*2.2*3.3')))
7.986
后成功解决问题。
当然具体的Python原理还需要具体探究。