Package decimal
Overview ▹
Index ▹
Variables
DivisionPrecision is the number of decimal places in the result when it doesn't divide exactly.
Example:
d1 := decimal.NewFromFloat(2).Div(decimal.NewFromFloat(3) d1.String() // output: "0.6666666666666667" d2 := decimal.NewFromFloat(2).Div(decimal.NewFromFloat(30000) d2.String() // output: "0.0000666666666667" d3 := decimal.NewFromFloat(20000).Div(decimal.NewFromFloat(3) d3.String() // output: "6666.6666666666666667" decimal.DivisionPrecision = 3 d4 := decimal.NewFromFloat(2).Div(decimal.NewFromFloat(3) d4.String() // output: "0.667"
var DivisionPrecision = 16
MarshalJSONWithoutQuotes should be set to true if you want the decimal to be JSON marshaled as a number, instead of as a string. WARNING: this is dangerous for decimals with many digits, since many JSON unmarshallers (ex: Javascript's) will unmarshal JSON numbers to IEEE 754 double-precision floating point numbers, which means you can potentially silently lose precision.
var MarshalJSONWithoutQuotes = false
Zero constant, to make computations faster.
var Zero = New(0, 1)
type Decimal ¶
Decimal represents a fixed-point decimal. It is immutable. number = value * 10 ^ exp
type Decimal struct {
// contains filtered or unexported fields
}
func Max ¶
func Max(first Decimal, rest ...Decimal) Decimal
Max returns the largest Decimal that was passed in the arguments.
To call this function with an array, you must do:
Max(arr[0], arr[1:]...)
This makes it harder to accidentally call Max with 0 arguments.
func Min ¶
func Min(first Decimal, rest ...Decimal) Decimal
Min returns the smallest Decimal that was passed in the arguments.
To call this function with an array, you must do:
Min(arr[0], arr[1:]...)
This makes it harder to accidentally call Min with 0 arguments.
func New ¶
func New(value int64, exp int32) Decimal
New returns a new fixed-point decimal, value * 10 ^ exp.
func NewFromFloat ¶
func NewFromFloat(value float64) Decimal
NewFromFloat converts a float64 to Decimal.
Example:
NewFromFloat(123.45678901234567).String() // output: "123.4567890123456" NewFromFloat(.00000000000000001).String() // output: "0.00000000000000001"
NOTE: this will panic on NaN, +/-inf
func NewFromFloatWithExponent ¶
func NewFromFloatWithExponent(value float64, exp int32) Decimal
NewFromFloatWithExponent converts a float64 to Decimal, with an arbitrary number of fractional digits.
Example:
NewFromFloatWithExponent(123.456, -2).String() // output: "123.46"
func NewFromString ¶
func NewFromString(value string) (Decimal, error)
NewFromString returns a new Decimal from a string representation.
Example:
d, err := NewFromString("-123.45") d2, err := NewFromString(".0001")
func (Decimal) Abs ¶
func (d Decimal) Abs() Decimal
Abs returns the absolute value of the decimal.
func (Decimal) Add ¶
func (d Decimal) Add(d2 Decimal) Decimal
Add returns d + d2.
func (Decimal) Ceil ¶
func (d Decimal) Ceil() Decimal
Ceil returns the nearest integer value greater than or equal to d.
func (Decimal) Cmp ¶
func (d Decimal) Cmp(d2 Decimal) int
Cmp compares the numbers represented by d and d2 and returns:
-1 if d < d2 0 if d == d2 +1 if d > d2
func (Decimal) Coefficient ¶
func (d Decimal) Coefficient() *big.Int
Coefficient returns the coefficient of the decimal. It is scaled by 10^Exponent()
func (Decimal) Div ¶
func (d Decimal) Div(d2 Decimal) Decimal
Div returns d / d2. If it doesn't divide exactly, the result will have DivisionPrecision digits after the decimal point.
func (Decimal) DivRound ¶
func (d Decimal) DivRound(d2 Decimal, precision int32) Decimal
DivRound divides and rounds to a given precision i.e. to an integer multiple of 10^(-precision)
for a positive quotient digit 5 is rounded up, away from 0 if the quotient is negative then digit 5 is rounded down, away from 0
Note that precision<0 is allowed as input.
func (Decimal) Equal ¶
func (d Decimal) Equal(d2 Decimal) bool
Equal returns whether the numbers represented by d and d2 are equal.
func (Decimal) Equals ¶
func (d Decimal) Equals(d2 Decimal) bool
Equals is deprecated, please use Equal method instead
func (Decimal) Exponent ¶
func (d Decimal) Exponent() int32
Exponent returns the exponent, or scale component of the decimal.
func (Decimal) Float64 ¶
func (d Decimal) Float64() (f float64, exact bool)
Float64 returns the nearest float64 value for d and a bool indicating whether f represents d exactly. For more details, see the documentation for big.Rat.Float64
func (Decimal) Floor ¶
func (d Decimal) Floor() Decimal
Floor returns the nearest integer value less than or equal to d.
func (*Decimal) GobDecode ¶
func (d *Decimal) GobDecode(data []byte) error
GobDecode implements the gob.GobDecoder interface for gob serialization.
func (Decimal) GobEncode ¶
func (d Decimal) GobEncode() ([]byte, error)
GobEncode implements the gob.GobEncoder interface for gob serialization.
func (Decimal) GreaterThan ¶
func (d Decimal) GreaterThan(d2 Decimal) bool
Greater Than (GT) returns true when d is greater than d2.
func (Decimal) GreaterThanOrEqual ¶
func (d Decimal) GreaterThanOrEqual(d2 Decimal) bool
Greater Than or Equal (GTE) returns true when d is greater than or equal to d2.
func (Decimal) IntPart ¶
func (d Decimal) IntPart() int64
IntPart returns the integer component of the decimal.
func (Decimal) LessThan ¶
func (d Decimal) LessThan(d2 Decimal) bool
Less Than (LT) returns true when d is less than d2.
func (Decimal) LessThanOrEqual ¶
func (d Decimal) LessThanOrEqual(d2 Decimal) bool
Less Than or Equal (LTE) returns true when d is less than or equal to d2.
func (Decimal) MarshalBinary ¶
func (d Decimal) MarshalBinary() (data []byte, err error)
MarshalBinary implements the encoding.BinaryMarshaler interface.
func (Decimal) MarshalJSON ¶
func (d Decimal) MarshalJSON() ([]byte, error)
MarshalJSON implements the json.Marshaler interface.
func (Decimal) MarshalText ¶
func (d Decimal) MarshalText() (text []byte, err error)
MarshalText implements the encoding.TextMarshaler interface for XML serialization.
func (Decimal) Mod ¶
func (d Decimal) Mod(d2 Decimal) Decimal
Mod returns d % d2.
func (Decimal) Mul ¶
func (d Decimal) Mul(d2 Decimal) Decimal
Mul returns d * d2.
func (Decimal) Neg ¶
func (d Decimal) Neg() Decimal
Neg returns -d.
func (Decimal) Pow ¶
func (d Decimal) Pow(d2 Decimal) Decimal
Pow returns d to the power d2
func (Decimal) QuoRem ¶
func (d Decimal) QuoRem(d2 Decimal, precision int32) (Decimal, Decimal)
QuoRem does divsion with remainder d.QuoRem(d2,precision) returns quotient q and remainder r such that
d = d2 * q + r, q an integer multiple of 10^(-precision) 0 <= r < abs(d2) * 10 ^(-precision) if d>=0 0 >= r > -abs(d2) * 10 ^(-precision) if d<0
Note that precision<0 is allowed as input.
func (Decimal) Rat ¶
func (d Decimal) Rat() *big.Rat
Rat returns a rational number representation of the decimal.
func (Decimal) Round ¶
func (d Decimal) Round(places int32) Decimal
Round rounds the decimal to places decimal places. If places < 0, it will round the integer part to the nearest 10^(-places).
Example:
NewFromFloat(5.45).Round(1).String() // output: "5.5" NewFromFloat(545).Round(-1).String() // output: "550"
func (*Decimal) Scan ¶
func (d *Decimal) Scan(value interface{}) error
Scan implements the sql.Scanner interface for database deserialization.
func (Decimal) Sign ¶
func (d Decimal) Sign() int
Sign returns:
-1 if d < 0 0 if d == 0 +1 if d > 0
func (Decimal) String ¶
func (d Decimal) String() string
String returns the string representation of the decimal with the fixed point.
Example:
d := New(-12345, -3) println(d.String())
Output:
-12.345
func (Decimal) StringFixed ¶
func (d Decimal) StringFixed(places int32) string
StringFixed returns a rounded fixed-point string with places digits after the decimal point.
Example:
NewFromFloat(0).StringFixed(2) // output: "0.00" NewFromFloat(0).StringFixed(0) // output: "0" NewFromFloat(5.45).StringFixed(0) // output: "5" NewFromFloat(5.45).StringFixed(1) // output: "5.5" NewFromFloat(5.45).StringFixed(2) // output: "5.45" NewFromFloat(5.45).StringFixed(3) // output: "5.450" NewFromFloat(545).StringFixed(-1) // output: "550"
func (Decimal) StringScaled ¶
func (d Decimal) StringScaled(exp int32) string
StringScaled first scales the decimal then calls .String() on it. NOTE: buggy, unintuitive, and DEPRECATED! Use StringFixed instead.
func (Decimal) Sub ¶
func (d Decimal) Sub(d2 Decimal) Decimal
Sub returns d - d2.
func (Decimal) Truncate ¶
func (d Decimal) Truncate(precision int32) Decimal
Truncate truncates off digits from the number, without rounding.
NOTE: precision is the last digit that will not be truncated (must be >= 0).
Example:
decimal.NewFromString("123.456").Truncate(2).String() // "123.45"
func (*Decimal) UnmarshalBinary ¶
func (d *Decimal) UnmarshalBinary(data []byte) error
UnmarshalBinary implements the encoding.BinaryUnmarshaler interface. As a string representation is already used when encoding to text, this method stores that string as []byte
func (*Decimal) UnmarshalJSON ¶
func (d *Decimal) UnmarshalJSON(decimalBytes []byte) error
UnmarshalJSON implements the json.Unmarshaler interface.
func (*Decimal) UnmarshalText ¶
func (d *Decimal) UnmarshalText(text []byte) error
UnmarshalText implements the encoding.TextUnmarshaler interface for XML deserialization.
func (Decimal) Value ¶
func (d Decimal) Value() (driver.Value, error)
Value implements the driver.Valuer interface for database serialization.
type NullDecimal ¶
NullDecimal represents a fixed-point decimal. It is immutable. number = value * 10 ^ exp
type NullDecimal struct { Decimal Decimal Valid bool }
func (*NullDecimal) Scan ¶
func (d *NullDecimal) Scan(value interface{}) error
Scan implements the sql.Scanner interface for database deserialization.
func (NullDecimal) Value ¶
func (d NullDecimal) Value() (driver.Value, error)
Value implements the driver.Valuer interface for database serialization.