OSDN Git Service

fix decimal (#479)
[bytom/vapor.git] / application / mov / match / match.go
index 4c0234f..845c228 100644 (file)
@@ -240,20 +240,13 @@ func IsMatched(orders []*common.Order) bool {
                return false
        }
 
-       rate := orderRatio(sortedOrders[0])
-       oppositeRate := big.NewFloat(0).SetInt64(1)
+       rate := big.NewRat(sortedOrders[0].RatioDenominator, sortedOrders[0].RatioNumerator)
+       oppositeRate := big.NewRat(1, 1)
        for i := 1; i < len(sortedOrders); i++ {
-               oppositeRate.Mul(oppositeRate, orderRatio(sortedOrders[i]))
+               oppositeRate.Mul(oppositeRate, big.NewRat(sortedOrders[i].RatioNumerator, sortedOrders[i].RatioDenominator))
        }
 
-       one := big.NewFloat(0).SetInt64(1)
-       return one.Quo(one, rate).Cmp(oppositeRate) >= 0
-}
-
-func orderRatio(order *common.Order) *big.Float {
-       ratio := big.NewFloat(0).SetInt64(order.RatioNumerator)
-       ratio.Quo(ratio, big.NewFloat(0).SetInt64(order.RatioDenominator))
-       return ratio
+       return rate.Cmp(oppositeRate) >= 0
 }
 
 func setMatchTxArguments(txInput *types.TxInput, isPartialTrade bool, position int, receiveAmounts uint64) {