Skip to content

Commit

Permalink
Add GoString method for Decimal and NullDecimal (#270)
Browse files Browse the repository at this point in the history
  • Loading branch information
a69 committed Feb 26, 2022
1 parent fa3b22f commit 5d3a982
Showing 1 changed file with 22 additions and 0 deletions.
22 changes: 22 additions & 0 deletions decimal.go
Original file line number Diff line number Diff line change
Expand Up @@ -1454,6 +1454,19 @@ func (d *Decimal) GobDecode(data []byte) error {
return d.UnmarshalBinary(data)
}

// GoString implements fmt.GoStringer and formats %#v to be printed in Go
// source code.
func (d *Decimal) GoString() string {

if d.value.IsInt64() {
return fmt.Sprintf("decimal.New(%d,%d)", d.value.Int64(), d.exp)
}
if d.value.Sign() < 0 {
return fmt.Sprintf("decimal.NewFromBigInt(new(big.Int).Neg(new(big.Int).SetBits(%#v)),%d)", d.value.Bits(), d.exp)
}
return fmt.Sprintf("decimal.NewFromBigInt(new(big.Int).SetBits(%#v),%d)", d.value.Bits(), d.exp)
}

// StringScaled first scales the decimal then calls .String() on it.
// NOTE: buggy, unintuitive, and DEPRECATED! Use StringFixed instead.
func (d Decimal) StringScaled(exp int32) string {
Expand Down Expand Up @@ -1682,6 +1695,15 @@ func (d NullDecimal) MarshalText() (text []byte, err error) {
return d.Decimal.MarshalText()
}

// GoString implements fmt.GoStringer and formats %#v to be printed in Go
// source code.
func (d NullDecimal) GoString() string {
if !d.Valid {
return "decimal.NullDecimal{Valid: false}"
}
return `decimal.NewNullDecimal(` + d.Decimal.GoString() + `)`
}

// Trig functions

// Atan returns the arctangent, in radians, of x.
Expand Down

0 comments on commit 5d3a982

Please sign in to comment.