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
sixer
V2EX  ›  Python

Python 新手,用 Python 计算占有百分比的时候,怎样保证比例圆满?

  •  
  •   sixer · 2016-05-26 14:46:56 +08:00 · 5972 次点击
    这是一个创建于 3122 天前的主题,其中的信息可能已经有所发展或是发生改变。

    这是四种商品的数量:

    6

    9

    9

    3

    print round(count*100.0/total_count,2);

    用上面的 Python 保留两位计算各自百分比,发现最后的比例和并不等于 100%。。。。

    21.43

    32.14

    32.14

    10.71

    网上搜索了一下没找到答案,求助各位大神。。。。。

    第 1 条附言  ·  2016-05-26 16:18:35 +08:00
    明白了,因为我把总数算错了!!!
    我太马虎了!!!
    给程序员丢脸了!😂
    13 条回复    2016-05-27 15:19:26 +08:00
    DeutschXP
        1
    DeutschXP  
       2016-05-26 14:58:03 +08:00
    你确定自己的 total_count 没有算错? total_count 这里不是应该 27 么?你怎么算成 28 的。
    soratadori
        2
    soratadori  
       2016-05-26 15:02:48 +08:00
    我觉得这个不是 python 问题,而是小学的数学问题
    am241
        3
    am241  
       2016-05-26 15:11:18 +08:00 via Android
    没有那么神奇的函数,自己写一个也不难吧
    Sunyanzi
        4
    Sunyanzi  
       2016-05-26 15:44:52 +08:00   ❤️ 2
    事实是在丢失精度并保证相同数字占比相同的情况下还要保证能得到精确的 100% 总和是不可能的 ...

    举例来说像你这种九个 3 拆分的情况最后应该得到 99.99 ... 差的那 0.01 就是你丢掉部分的总和 ...

    如果你一定要得到 100.00 就把这 0.01 随便填在任何一个结果后面就好 ... 完全没有差别 ...

    只是到时候你不要再问为什么同样是 9 一个占比 33.33% 另一个占比 33.34% 就好了 ...

    另外 ... 虽然我不觉得做程序的人数学一定要有多好 ... 但这种显而易见的事情都不明白是要怎样 ...
    dxwwym
        5
    dxwwym  
       2016-05-26 15:50:14 +08:00 via iPhone
    @Sunyanzi 哈哈 excel 常见问题,程序员一般数学好,但是不一定对数字敏感。
    shuax
        6
    shuax  
       2016-05-26 15:51:11 +08:00
    最后一个的比例用 1 来减去前面的啊,那么简单。
    sixer
        7
    sixer  
    OP
       2016-05-26 16:17:12 +08:00
    @DeutschXP
    @soratadori
    @am241
    @Sunyanzi
    @dxwwym
    @shuax

    不对住各位,我确实把总数搞错了。。。。非常抱歉!!!!!也谢谢楼上同学告诉我解决误差的方案,感谢!!
    pynix
        8
    pynix  
       2016-05-26 16:55:09 +08:00
    就算总数对了,你对百分比做了四舍五入,加起来不一定等于 1
    jamiesun
        9
    jamiesun  
       2016-05-26 19:22:17 +08:00
    还是 decimal 吧
    KentY
        10
    KentY  
       2016-05-26 20:40:05 +08:00
    前面四舍五入, 到最后一个, 用 100 减了前面总和做结果就好啦 :-D
    msg7086
        11
    msg7086  
       2016-05-26 23:01:15 +08:00
    通常会考虑用 Rational 类型。我帮你在 Python 查了一下,应该是这个东西。
    https://docs.python.org/3/library/fractions.html
    sixer
        12
    sixer  
    OP
       2016-05-27 10:35:11 +08:00
    @pynix
    @jamiesun
    @KentY
    @msg7086
    谢谢各位!
    caomaocao
        13
    caomaocao  
       2016-05-27 15:19:26 +08:00
    服···
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   982 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 18:43 · PVG 02:43 · LAX 10:43 · JFK 13:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.