一个关于提现手续费问题

2018-03-13 10:22:22 +08:00
 tojike

本人最近在弄一个提现功能,就是微信的企业打款,代码写得差不多了,但是最近遇到了一个一直想不通的提现手续费问题。 产品狗要求提现要收手续费 8%。比如我我的余额就 2 元 1、全部提现 2-20.08=1.84 也就是我最多拿 1.84 元 2、奇葩提现 假如我就提 1.84 , 那么结果是 1.84-1.840.08 = 0.1 最后我的余额会多出 0.1 出来

问题:
1、同样是能拿到的都是 1.84 元,为什么一个会多出 0.01 来?好苦恼,想不通。最重要的是:产品狗认为这是 bug。
2、有没有好的解决方法?或者怎么说服产品狗?
5601 次点击
所在节点    PHP
30 条回复
nmdx
2018-03-13 11:28:59 +08:00
pagxir
2018-03-13 12:06:56 +08:00
提现当然是从账号余额扣手续费才合理。比如 ATM 取款手续费,你见过会从你取出来的钱里扣么?况且用户提现 100 块,很自然是希望拿到 100 块,而不是 92。难道你希望用户提了 100,然后再提 8,然后 0.64 一直下去?
canbingzt
2018-03-13 13:54:00 +08:00
这个是理解问题吧
1.提现 2 元,到手并不是 2 元
2.提现 1.84 元,到手 1.84
这 2 个并不等价

如果是不从余额里扣除手续费,那么提现 2 元(所有金额)计算手续费应该是
(2/1.08)*0.08=0.148148 ……,到手 2/1.08=1.851851 ……

如果是从余额里扣除手续费,那么不能提现所有金额(因为没有余额扣手续费了),计算可提现最大金额是
2/1.08=1.851851 ……,手续费(2/1.08)*0.08=0.148148 ……
与上一条相同

具体规则怎么制定就看你自己了,还有四舍五入还是取整都可以
scriptB0y
2018-03-13 14:00:02 +08:00
金钱放在数据库里面没有用小数存的,都是用整数存多少分……
madmanffff
2018-03-13 14:12:21 +08:00
你自己计算 2 块的时候是从提出的 2 块中取手续费的,那提 1.84 的时候肯定是从 1.84 中拿手续费啊,你到手肯定没有 1.84,跟你现在的余额并没有关系。
tojike
2018-03-13 15:31:26 +08:00
@pagxir 我们产品也觉得提现的手续费从账号余额扣手续费比较合理。但是会出现那个 0.01 的问题

@canbingzt 我突然发现你的算法是对的,v2 大神果然多,提现 2 元,手续费 8%我算出来的是 1.84 我只是没搞懂 1.08 怎么来的,1+0.08 么。数学比较菜,谅解。
canbingzt
2018-03-13 15:39:00 +08:00
@tojike
一共 2 元,全部提现,那么设提现金额是 x,有 x+x*0.08 = 2,可提现最大金额是 2/1.08 ,手续费 2/1.08*0.08
提现 2 元,不包含手续费,这个比较简单,提现 2 元,手续费 2*0.08=0.16 ,一共 2.16 ,余额需要大于 2.16
MortyP
2018-03-13 15:42:19 +08:00
这个就是看手续费是按照提现得到的金额还是提现前的金额来算的吧,你们两种算法把这俩搞混了吧
cnkuner
2018-03-13 16:33:55 +08:00
问题在于精度。
建议产品以 1 元的整倍数提现。
slince
2018-03-13 23:56:46 +08:00
所以在价格的存取上,单位全部用分,价格的运算也不要直接计算数字,用 https://packagist.org/packages/moneyphp/money 中转下;

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/437498

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX