V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
chenstack
V2EX  ›  Python

不懂就问, python3 的 1 // 0.1

  •  
  •   chenstack · 2019-10-21 11:04:11 +08:00 · 3612 次点击
    这是一个创建于 1894 天前的主题,其中的信息可能已经有所发展或是发生改变。
    如题,举个例子,python3 中想得到 int(10 / 2),可以用
    >>> 10 // 2
    5
    >>> (10).__floordiv__(2)
    5
    同理,想得到 int(1 / 0.1),于是试了一下
    >>> 1 // 0.1
    9.0
    >>> 1 // 0.2
    4.0
    >>> (1).__floordiv__(0.1)
    NotImplemented
    问一下其中的原理
    8 条回复    2019-10-24 18:43:02 +08:00
    est
        1
    est  
       2019-10-21 11:06:30 +08:00
    >>> (1.0).__floordiv__(0.1)
    9.0



    另外双下划线不推荐日常使用。
    chenstack
        2
    chenstack  
    OP
       2019-10-21 11:12:24 +08:00
    @est 那说明是把 1 转换成 1.0 了,或者说是内部调用了(0.1).__rfloordiv__(1),那么问题来了,1.0 // 0.1 结果是 9.0,是怎么计算出来的
    datou
        3
    datou  
       2019-10-21 11:22:17 +08:00
    楼主应该是需要的 trunc 而不是 floor 吧?
    Northxw
        4
    Northxw  
       2019-10-21 11:28:31 +08:00   ❤️ 1
    随便搜了下,大概看了下,分享给你: https://blog.csdn.net/huzq1976/article/details/51581330
    chenstack
        5
    chenstack  
    OP
       2019-10-21 11:45:45 +08:00
    @Northxw thx
    msg7086
        6
    msg7086  
       2019-10-21 14:43:09 +08:00
    >>> 1.0 // 0.1
    9.0
    >>> 1.000000000000001 // 0.1
    10.0

    懂了吗?

    这里的「 0.1 」是要比 0.1 大的。二进制下的 0.1 是一个循环小数,循环小数在有限精度下必然丢失精度,所以「 0.1 」是不等于 0.1 的。
    msg7086
        7
    msg7086  
       2019-10-21 14:44:12 +08:00
    >>> 1.0-.1-.1-.1-.1-.1-.1-.1-.1-.1-.1
    1.3877787807814457e-16
    catroll
        8
    catroll  
       2019-10-24 18:43:02 +08:00
    @Northxw 之前没注意过这个,因崔斯汀
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2808 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 13:55 · PVG 21:55 · LAX 05:55 · JFK 08:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.