数字货币交易所结算精度问题

2019-03-15 09:27:08 +08:00
 tosmq009

数字货币的最小单位是 1 乘 10 的负 8 次方,即 0.00000001,出现任何比小数点后 8 位小的则自动截取小数点后 8 位,不采用四舍五入的方法 交易所 MGD/BTC 这两种数字货币的交易 假设: 甲以 1 个 MGD=0.000494BTC 的价格购买 16000 个 MGD

即买入下单: 价格(BTC)0.000494 数量( MGD ) 16000 预计成交额 7.904BTC ( 0.000494* 16000 ) 下单时,系统冻结 7.904 个 BTC 用于购买 16000 个 MDG, 这笔订单在撮合交易系统里分别与乙和丙完成成交 乙、价格 0.000494 数量 11057.9159 成交 5.4626104546 截取八位 5.46261045 丙、价格 0.000494 数量 4942.0841 成交 2.4413895454 截取八位 2.44138954

则乙获得 5.46261045 个 BTC ;丙获得 2.44138954 个 BTC,双方共获得 7.90399999 而甲下单以后被冻结 7.904 个 BTC 并成功购买 16000 个 MGD 那么这 7.904-7.90399999=0.000000001 的误差如何来处理?

我们的方法是算作交易所的收益,但是否有可能某一种交易的情况下,需要交易所补贴类似这样 0.00000001 的情况? 而且交易数据是用户可查的,对于甲来说,两次交易分别显示花出 5.46261045 个 BTC 和 2.44138954 个 BTC,那么甲是否会找交易所问他的 0.00000001 个 BTC 哪里去了。

20465 次点击
所在节点    数学
7 条回复
justfindu
2019-03-15 09:43:17 +08:00
一般他们会使用长整数来做, 然后业务自己处理倍数
tosmq009
2019-03-15 09:45:17 +08:00
@justfindu 那最终展示给客户的时候,还是需要截取到 8 位的,这种情况是如何保证双方的利益呢?谢谢
subpo
2019-03-15 09:47:47 +08:00
实际 10 位,截取 8 位,剩余的不显示(但是记录下来),如果下次用户得到的货币可以补足,即可给用户提现
即 数据库记录的精度要大于实际逻辑处理的精度
leavic
2019-03-15 10:13:09 +08:00
一般就当交易所收益了,这种碎币很多交易所都有,总有那么几毛钱是拿不出来的。
tosmq009
2019-03-15 15:26:51 +08:00
@leavic 这是有效粗暴的解决办法~~ good
tosmq009
2019-03-15 15:27:31 +08:00
@subpo 意思是 下次交易之后再补足 ,当前交易允许数字毛刺
subpo
2019-03-15 16:06:37 +08:00
@tosmq009 #6 数字并不是毛刺,你也可以在提现资产界面显示全部位数,但是只能提 8 位。

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

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

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

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

© 2021 V2EX