tosmq009
V2EX  ›  数学

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

  •  
  •   tosmq009 · Mar 15, 2019 · 21501 views
    This topic created in 2644 days ago, the information mentioned may be changed or developed.

    数字货币的最小单位是 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 哪里去了。

    7 replies    2019-03-15 16:06:37 +08:00
    justfindu
        1
    justfindu  
       Mar 15, 2019
    一般他们会使用长整数来做, 然后业务自己处理倍数
    tosmq009
        2
    tosmq009  
    OP
       Mar 15, 2019
    @justfindu 那最终展示给客户的时候,还是需要截取到 8 位的,这种情况是如何保证双方的利益呢?谢谢
    subpo
        3
    subpo  
       Mar 15, 2019
    实际 10 位,截取 8 位,剩余的不显示(但是记录下来),如果下次用户得到的货币可以补足,即可给用户提现
    即 数据库记录的精度要大于实际逻辑处理的精度
    leavic
        4
    leavic  
       Mar 15, 2019
    一般就当交易所收益了,这种碎币很多交易所都有,总有那么几毛钱是拿不出来的。
    tosmq009
        5
    tosmq009  
    OP
       Mar 15, 2019
    @leavic 这是有效粗暴的解决办法~~ good
    tosmq009
        6
    tosmq009  
    OP
       Mar 15, 2019
    @subpo 意思是 下次交易之后再补足 ,当前交易允许数字毛刺
    subpo
        7
    subpo  
       Mar 15, 2019
    @tosmq009 #6 数字并不是毛刺,你也可以在提现资产界面显示全部位数,但是只能提 8 位。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3555 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 42ms · UTC 04:58 · PVG 12:58 · LAX 21:58 · JFK 00:58
    ♥ Do have faith in what you're doing.