关于Python的数值精度问题

在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原理还需要具体探究。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 背景 在java中float赋值给double,会产生精度问题。 输出为2.0999999046325684。 小...
    我叫小小强阅读 19,433评论 2 23
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,318评论 25 709
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,120评论 19 139
  • 口号就是招牌,口号也是生产力:起兵反秦之初,百姓推举了刘邦。 刘邦不是谦虚,让大家另请高明,说了一段非常有名的话:...
    马唐阅读 1,567评论 0 0
  • 眨眼间,场上的局势发生了翻天覆地的变化,原本毫无反手之力,被虐杀到极致的王也直接来了一个大反转,秒杀了何朝阳,甚至...
    jaeson舒阅读 1,432评论 0 0

友情链接更多精彩内容