美文网首页
记一次python实践中遇到的浮点数的坑

记一次python实践中遇到的浮点数的坑

作者: 舒小贱 | 来源:发表于2017-12-19 18:21 被阅读0次

先看代码:

i = 1
while i != 1.5:
    print(i)
    i += 0.1

上面的代码输出是多少?正确答案是无限循环输出。

1
1.1
1.2000000000000002
1.3000000000000003
1.4000000000000004
1.5000000000000004
1.6000000000000005
1.7000000000000006
1.8000000000000007
1.9000000000000008
2.000000000000001
2.100000000000001
2.200000000000001
2.300000000000001
2.4000000000000012
2.5000000000000013
2.6000000000000014
2.7000000000000015
2.8000000000000016
2.9000000000000017
3.0000000000000018
3.100000000000002
...

原因就在于0.1不是精确表示,在循环到第5次的时候,i的实际值是1.5000000000000004。所以此程序根本就没有跳出while循环的机会。

在计算机的世界里,浮点数的存储规则决定了不是所有的浮点数都能够精确表示。有些不能精确表示的,只能无限接近,比如0.1转换成二进制是0.00011001100110011...其中0011是无限循环的。

所以在while中 !=1.5 这种表达式是要避免的。浮点数的比较同样最好能够指明精度。

相关文章

  • 记一次python实践中遇到的浮点数的坑

    先看代码: 上面的代码输出是多少?正确答案是无限循环输出。 原因就在于0.1不是精确表示,在循环到第5次的时候,i...

  • 浮点数的转化遇到的坑

    非原创-搬运记录文章-浮点数的转化遇到的坑 由于计算机表示小数(包括float和double型小数)都有误差,我们...

  • python遇到的坑

    1、为Python2.7安装库(例如ez_setup.py),所报错误:UnicodeDecodeError: '...

  • python遇到的坑

    1、for 循环不能直接丢修改列表元素的值 想要修改要通过列表的索引

  • CentOS 删除Python和yum后如何恢复yum

    有一逗逼朋友在搞Python的时候把Python2.7卸载了,并顺手删除了yum. 帮忙恢复,遇到了一些坑,特此记...

  • go json 实践中遇到的坑

    在使用 go 语言开发过程中,经常需要使用到 json 包来进行 json 和 struct 的互相转换,在使用过...

  • python所遇到的坑

    我是在ubuntu中,自带的有python2,python3有安装了anaconda套件,所以python的版本很...

  • Python中遇到的坑

    只要一写程序,再加上不熟悉,多多少少会遇到一些问题。在这篇文章中,我把在Python中遇到的一些问题,进行一个简单...

  • python学习遇到的坑

    1.在pycharm中配置python解释器 file→ setting→ project→ project in...

  • 写python遇到的坑

    xml含有非法字符 This page contains the following errors: error ...

网友评论

      本文标题:记一次python实践中遇到的浮点数的坑

      本文链接:https://www.haomeiwen.com/subject/uvsiwxtx.html