首先要清晰的认识到我们计算机的世界里,只有0和1,必然导致浮点数并不能准确地表示十进制。上述种种问题,就来自于计算机的cpu与浮点数的表示方式,我们自己在代码层面是没法控制的。在有些需要精确表示浮点数的场合,例如财务结算,这些误差就不可接受。

当然,python中的decimal模块可以解决上面的烦恼,decimal模块中,可以通过整数,字符串或原则构建decimal.Decimal对象。如果是浮点数,特别注意因为浮点数本身存在误差,需要先将浮点数转化为字符串。虽然如此一来会导致我们性能有所损失,但是在对数据要求特别精确的场合(例如财务结算),这些性能的损失是值得的。那么如何判断浮点数相等呢。

一般如果代码中需要判断浮点数相等时,我们会采用误差法,比如两个浮点数a-b < 较小的误差值EPSINON,则认为它们相等。

整个经常出现的面试题:

  print(99.9 - 90)

  print(99.9-90.9 == 9.0)

  print(99.9-90.0 == 9.9)

答案自己去print.

  另外什么时候浮点数相等呢。因为最终的原因还是因为二进制跟十进制的转换问题,所以我们可以多用几组数据去查看二进制的值,特殊点66.6和60.6以及上面的值。

       这里可以告诉大家最终的一个结果: 当你被减数和减数实数部转化成二进制的位数相等的时候。返回True,否则false。

  原因就是计算机会有一个识别显示的最大长度。不会把无限循环小数当作结果。

 

 

 

posted on 2019-11-28 20:07  hole_cheng  阅读(538)  评论(0编辑  收藏  举报