推荐学习书目
› 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
lxpwhisper
V2EX  ›  Python

Python 保留小数的问题

  •  
  •   lxpwhisper · Oct 18, 2018 · 3879 views
    This topic created in 2940 days ago, the information mentioned may be changed or developed.

    最近在对支付宝的接口,支付宝收的手续费竟然没有给你,要自己算!(吐槽一下) 问客服说是手续费计算保留到分四舍五入 然后就碰到了如下问题 其中有一笔计算结果是 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
    ranleng
    Oct 18, 2018 via Android
    1
    因为至少要有 1 分的手续费这样吧
    lxpwhisper
    lxpwhisper
    OP
    Oct 18, 2018
    2
    @ranleng 不呀,我支付 1 元时候就是 0 手续费
    Zzdex
    Zzdex
    Oct 18, 2018 via iPhone
    3
    0.0049
    0.005
    0.01

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

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