func (v Value) BigMul(v2 Value) Value {
	x := new(big.Int).Mul(big.NewInt(int64(v)), big.NewInt(int64(v2)))
	return Value(x.Int64() / DefaultPow)
}
BigMul is the math/big version multiplication
package fixedpoint
import (
	"database/sql/driver"
	"encoding/json"
	"errors"
	"fmt"
	"math"
	"math/big"
	"strconv"
	"sync/atomic"
)
const MaxPrecision = 12
const DefaultPrecision = 8
const DefaultPow = 1e8
type Value int64
func (v Value) Value() (driver.Value, error) {
	return v.Float64(), nil
}
func (v *Value) Scan(src interface{}) error {
	switch d := src.(type) {
	case int64:
		*v = Value(d)
		return nil
	case float64:
		*v = NewFromFloat(d)
		return nil
	case []byte:
		vv, err := NewFromString(string(d))
		if err != nil {
			return err
		}
		*v = vv
		return nil
	default:
	}
	return fmt.Errorf("fixedpoint.Value scan error, type: %T is not supported, value; %+v", src, src)
}
func (v Value) Float64() float64 {
	return float64(v) / DefaultPow
}
func (v Value) Abs() Value {
	if v < 0 {
		return -v
	}
	return v
}
func (v Value) String() string {
	return strconv.FormatFloat(float64(v)/DefaultPow, 'f', -1, 64)
}
func (v Value) Percentage() string {
	return fmt.Sprintf("%.2f%%", v.Float64()*100.0)
}
func (v Value) SignedPercentage() string {
	if v > 0 {
		return "+" + v.Percentage()
	}
	return v.Percentage()
}
func (v Value) Int64() int64 {
	return int64(v.Float64())
}
func (v Value) Int() int {
	return int(v.Float64())
}