首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python 学习手册
Python Cookbook
Python 基础教程
Python Sites
PyPI - Python Package Index
http://www.simple-is-better.com/
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
宝塔
V2EX  ›  Python

请问,这是 Python 的 bug 吗?

  •  
  •   nvksie · 222 天前 · 1786 次点击
    这是一个创建于 222 天前的主题,其中的信息可能已经有所发展或是发生改变。
    >>> 4.8*12
    57.599999999999994
    >>>

    如果最后是个 9 都可以理解,为啥最后是个 4 ??
    17 回复  |  直到 2019-04-12 13:46:12 +08:00
        1
    king1101   222 天前
    这些错误是由底层 CPU 和 IEEE 754 标准通过自己的浮点单位去执行算术时的特征。由于 Python 的浮点数据类型使用底层表示存储数据,因此你没办法去避免这样的误差。如果想要精确一点的话,可以使用 decimal 模块。(摘自 Python Cookbook )
        2
    xiaoheijw   222 天前
    python 默认的是 17 位小数的精度,前 16 位是准确的,第 17 位开始不准确
        3
    shuax   222 天前
    基础不牢固啊
        4
    shintendo   222 天前
    这不是 python 的 bug,而是几乎所有主流编程语言(使用 IEEE 754 格式存储浮点数)都有的问题
    其本质原因是,在十进制里能精确表示的小数,用二进制不一定能精确表示
        5
    justou   222 天前
    每隔一段时间 python 都要出一个这种 bug
    这是好事, 说明玩蛇的队伍一直都在壮大
        6
    wly19960911   222 天前
    https://www.guokr.com/article/27173/ 看这篇就好了。主要是真实值展示和二进制存储存储的差异问题。
        7
    hmzt   222 天前   ♥ 1
    看来 c 语言作为入门语言还是很必要的,hh
        8
    shawndev   222 天前
    这是浮点数的 bug,如果嫌计算不准确,听说可以试一试 fortran
        9
    jhsea3do   222 天前
    nodejs 下有一款 big.js 很好用

    python 下用 numpy 可以

    import numpy as np
    np.multiply(4.8, 1.2)
        10
    vcgo   222 天前
    浮点数运算丢失精度,不只是 Python,很多编程语言都是这样。
        11
    jhsea3do   222 天前
    @jhsea3do numpy 的语法我搞错了,以前搞过的,有点忘记了
        12
    whoami9894   222 天前 via Android
    是的,这是解释器的 bug,楼主快去社区反馈
        13
    mmdsun   222 天前 via Android
    快去恶补基础。不止是 py 不少语言都丢精度。

    高精度运算比如价格:可以库里存分。用 long
    或者整数小数分开处理。
    java 可以用大数类运算。
        14
    tcitry   222 天前
    看看小数点后的二进制表示法?
        15
    nikolai   222 天前
        16
    fan2006   222 天前
    from decimal import Decimal
    print(Decimal('4.8')*12)
        17
    Qzier   220 天前 via iPhone
    与编程语言无关,与计算机浮点数的表示有关。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4270 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 47ms · UTC 03:29 · PVG 11:29 · LAX 19:29 · JFK 22:29
    ♥ Do have faith in what you're doing.