mirror of
https://github.com/shopspring/decimal.git
synced 2024-11-22 20:40:48 +01:00
parent
3c692774ac
commit
b9ab2bce74
2 changed files with 26 additions and 8 deletions
|
@ -85,7 +85,7 @@ func New(value int64, exp int32) Decimal {
|
||||||
func NewFromBigInt(value *big.Int, exp int32) Decimal {
|
func NewFromBigInt(value *big.Int, exp int32) Decimal {
|
||||||
return Decimal{
|
return Decimal{
|
||||||
value: big.NewInt(0).Set(value),
|
value: big.NewInt(0).Set(value),
|
||||||
exp: exp,
|
exp: exp,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -615,6 +615,10 @@ func (d Decimal) Truncate(precision int32) Decimal {
|
||||||
|
|
||||||
// UnmarshalJSON implements the json.Unmarshaler interface.
|
// UnmarshalJSON implements the json.Unmarshaler interface.
|
||||||
func (d *Decimal) UnmarshalJSON(decimalBytes []byte) error {
|
func (d *Decimal) UnmarshalJSON(decimalBytes []byte) error {
|
||||||
|
if string(decimalBytes) == "null" {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
str, err := unquoteIfQuoted(decimalBytes)
|
str, err := unquoteIfQuoted(decimalBytes)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("Error decoding string '%s': %s", decimalBytes, err)
|
return fmt.Errorf("Error decoding string '%s': %s", decimalBytes, err)
|
||||||
|
|
|
@ -231,20 +231,19 @@ func TestNewFromFloatWithExponent(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
func TestNewFromBigIntWithExponent(t *testing.T) {
|
func TestNewFromBigIntWithExponent(t *testing.T) {
|
||||||
type Inp struct {
|
type Inp struct {
|
||||||
val *big.Int
|
val *big.Int
|
||||||
exp int32
|
exp int32
|
||||||
}
|
}
|
||||||
tests := map[Inp]string{
|
tests := map[Inp]string{
|
||||||
Inp{big.NewInt(123412345),-3}: "123412.345",
|
Inp{big.NewInt(123412345), -3}: "123412.345",
|
||||||
Inp{big.NewInt(2234), -1}: "223.4",
|
Inp{big.NewInt(2234), -1}: "223.4",
|
||||||
Inp{big.NewInt(323412345), 1}: "3234123450",
|
Inp{big.NewInt(323412345), 1}: "3234123450",
|
||||||
Inp{big.NewInt(423412345), 0}: "423412345",
|
Inp{big.NewInt(423412345), 0}: "423412345",
|
||||||
Inp{big.NewInt(52341235), -5}: "523.41235",
|
Inp{big.NewInt(52341235), -5}: "523.41235",
|
||||||
Inp{big.NewInt(623412345),-6}: "623.412345",
|
Inp{big.NewInt(623412345), -6}: "623.412345",
|
||||||
Inp{big.NewInt(723412345),-7}: "72.3412345",
|
Inp{big.NewInt(723412345), -7}: "72.3412345",
|
||||||
}
|
}
|
||||||
|
|
||||||
// add negatives
|
// add negatives
|
||||||
|
@ -299,6 +298,21 @@ func TestJSON(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestUnmarshalJSONNull(t *testing.T) {
|
||||||
|
var doc struct {
|
||||||
|
Amount Decimal `json:"amount"`
|
||||||
|
}
|
||||||
|
docStr := `{"amount": null}`
|
||||||
|
err := json.Unmarshal([]byte(docStr), &doc)
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("error unmarshaling %s: %v", docStr, err)
|
||||||
|
} else if !doc.Amount.Equal(Zero) {
|
||||||
|
t.Errorf("expected Zero, got %s (%s, %d)",
|
||||||
|
doc.Amount.String(),
|
||||||
|
doc.Amount.value.String(), doc.Amount.exp)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestBadJSON(t *testing.T) {
|
func TestBadJSON(t *testing.T) {
|
||||||
for _, testCase := range []string{
|
for _, testCase := range []string{
|
||||||
"]o_o[",
|
"]o_o[",
|
||||||
|
|
Loading…
Reference in a new issue