package fixed8 import ( "errors" "fmt" "strconv" ) const ( decimals = 100000000 ) var errInvalidString = errors.New("Fixed8 must satisfy following regex \\d+(\\.\\d{1,8})?") // Fixed8 represents a fixed-point number with precision 10^-8. type Fixed8 int64 // String implements the Stringer interface. func (f Fixed8) String() string { val := f.Value() return strconv.FormatFloat(val, 'f', -1, 64) } // Value returns the original value representing the Fixed8. func (f Fixed8) Value() float64 { return float64(f) / float64(decimals) } // Add adds two Fixed8 values together func (f Fixed8) Add(val Fixed8) Fixed8 { a := int64(f.Value()) b := int64(val.Value()) c := a + b return FromInt(c) } //Sub subtracts two fixed values from each other func (f Fixed8) Sub(val Fixed8) Fixed8 { a := int64(f.Value()) b := int64(val.Value()) c := a - b return FromInt(c) } //FromInt returns a Fixed8 objects from an int64 func FromInt(val int64) Fixed8 { return Fixed8(val * decimals) } // FromFloat returns a Fixed8 object from a float64 func FromFloat(val float64) Fixed8 { return Fixed8(val * decimals) } // FromString returns a Fixed8 object from a string func FromString(val string) (Fixed8, error) { res, err := strconv.ParseFloat(val, 64) if err != nil { return 0, fmt.Errorf("failed at parsing string %s", val) } return FromFloat(res), nil }