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

Python 保留小数的问题

  •  
  •   liuxingpu · 2018-10-18 13:56:38 +08:00 · 2789 次点击
    这是一个创建于 2224 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近在对支付宝的接口,支付宝收的手续费竟然没有给你,要自己算!(吐槽一下) 问客服说是手续费计算保留到分四舍五入 然后就碰到了如下问题 其中有一笔计算结果是 0.00494 元手续费,我按四舍五入得到的结果是 0,然而支付宝那边计算结果是 0.01,我就好奇这是怎么四舍五入的啊.....

    from decimal import Decimal, ROUND_HALF_UP
    Decimal('0.00494').quantize(Decimal('0.00'))  # 结果是 0.00
    Decimal('0.00494').quantize(Decimal('0.00'), ROUND_HALF_UP) # 结果是 0.00
    

    是不是我哪里弄错了? 谁能给我解释一下呀,不胜感激

    ranleng
        1
    ranleng  
       2018-10-18 13:59:17 +08:00 via Android
    因为至少要有 1 分的手续费这样吧
    liuxingpu
        2
    liuxingpu  
    OP
       2018-10-18 14:00:04 +08:00
    @ranleng 不呀,我支付 1 元时候就是 0 手续费
    Zzdex
        3
    Zzdex  
       2018-10-18 14:01:45 +08:00 via iPhone
    0.0049
    0.005
    0.01

    2333
    liuxingpu
        4
    liuxingpu  
    OP
       2018-10-18 14:02:48 +08:00
    @Zzdex 那这还是保留到分嘛...
    liuxingpu
        5
    liuxingpu  
    OP
       2018-10-18 14:14:16 +08:00
    有没有支付宝的大佬来解释一下?
    sjw199166
        6
    sjw199166  
       2018-10-18 14:58:06 +08:00
    根据小数点后面的所有的位数 每一位往前四舍五入呗 到 2 位的时候 break 掉 2 楼解释的多明白。。
    kkhaike
        7
    kkhaike  
       2018-10-18 15:03:17 +08:00
    我觉得 ranleng 说的合理,大于 0,小于 0.01 ,按 0.01
    sutra
        8
    sutra  
       2018-10-18 15:12:28 +08:00
    @liuxingpu 1 元的手续费计算出来是多少?是不是用 double 表示出来都是 0 ?
    liuxingpu
        9
    liuxingpu  
    OP
       2018-10-18 15:23:00 +08:00
    @sjw199166

    @sutra
    我试了一笔手续费为 0.004712 的交易,支付宝那边的结果是 0 手续费,如果按每一位四舍五入这个应该也是 0.01 吧,我觉得问题出在 9 上? 但是感觉不合理啊
    liuxingpu
        10
    liuxingpu  
    OP
       2018-10-18 15:23:39 +08:00
    @kkhaike 确实有 0 手续费的
    kkhaike
        11
    kkhaike  
       2018-10-18 15:40:17 +08:00
    @liuxingpu 我说大于 0
    kkhaike
        12
    kkhaike  
       2018-10-18 15:41:04 +08:00
    @liuxingpu 刚刚没看回复,不好意思
    GoLand
        13
    GoLand  
       2018-10-18 15:55:46 +08:00 via iPhone
    你这个直接( 0,0.01 ]的就算 0.01 ,其他的照常四舍五入不行么。
    liuxingpu
        14
    liuxingpu  
    OP
       2018-10-18 16:17:51 +08:00
    @kkhaike ..上面提到的手续费都是大于 0 的呀
    liuxingpu
        15
    liuxingpu  
    OP
       2018-10-18 16:19:10 +08:00
    @GoLand 上面有四舍五入后是 0 的例子,不能都按 0.01,虽然就 1 分钱的事,但是帐会对不上啊
    wlsnx
        16
    wlsnx  
       2018-10-18 18:35:29 +08:00
    不会是你算出的手续费本来就有误差吧
    dairoot
        17
    dairoot  
       2018-10-18 19:01:46 +08:00
    round(Decimal('0.00494').quantize(Decimal('0.000')), 2)
    inoki
        18
    inoki  
       2018-10-18 23:59:30 +08:00 via Android
    一般涉及到钱的不都是以分为单位的整数嘛😂拙见
    l4ever
        19
    l4ever  
       2018-10-19 07:27:50 +08:00 via iPhone
    手续费小于 0.01 就设置成等于 0.01 大于 0.01 再四舍五入取值。
    PulpFunction
        20
    PulpFunction  
       2018-10-19 08:59:38 +08:00
    ‘我一再强调,只能多收,不能少收。说吧,多收了多收’
    liuxingpu
        21
    liuxingpu  
    OP
       2018-10-19 09:26:10 +08:00
    @wlsnx
    @dairoot
    @inoki
    @l4ever
    @PulpFunction
    感谢各位大佬回复,此帖终结
    原因不是出在计算上,毕竟计算机是不会骗人的
    liuxingpu
        22
    liuxingpu  
    OP
       2018-10-19 09:27:27 +08:00
    @liuxingpu 少打了一句,是支付宝那边客服把我签约的手续费率搞错了,后面辗转了好几个客服,他们才发现是费率错误的原因.....此外再吐槽一句....客服质量真的是参差不齐啊
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5003 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 09:45 · PVG 17:45 · LAX 01:45 · JFK 04:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.