Revert remove insignificant digits (#159)

* revert original remove insignificant change (PR 46), and add the logic back as a function
This commit is contained in:
Jason Biegel 2020-02-27 15:28:08 -05:00 committed by GitHub
parent a08b92da27
commit 02e2044944
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 6 additions and 9 deletions

View file

@ -153,13 +153,8 @@ func NewFromString(value string) (Decimal, error) {
// an int // an int
intString = value intString = value
} else if len(parts) == 2 { } else if len(parts) == 2 {
// strip the insignificant digits for more accurate comparisons. intString = parts[0] + parts[1]
decimalPart := strings.TrimRight(parts[1], "0") expInt := -len(parts[1])
intString = parts[0] + decimalPart
if intString == "" && parts[1] != "" {
intString = "0"
}
expInt := -len(decimalPart)
exp += int64(expInt) exp += int64(expInt)
} else { } else {
return Decimal{}, fmt.Errorf("can't convert %s to decimal: too many .s", value) return Decimal{}, fmt.Errorf("can't convert %s to decimal: too many .s", value)
@ -870,6 +865,7 @@ func (d Decimal) RoundCash(interval uint8) Decimal {
dVal := Decimal{ dVal := Decimal{
value: iVal, value: iVal,
} }
// TODO: optimize those calculations to reduce the high allocations (~29 allocs). // TODO: optimize those calculations to reduce the high allocations (~29 allocs).
return d.Mul(dVal).Round(0).Div(dVal).Truncate(2) return d.Mul(dVal).Round(0).Div(dVal).Truncate(2)
} }

View file

@ -310,8 +310,9 @@ func TestNewFromStringDeepEquals(t *testing.T) {
} }
tests := []StrCmp{ tests := []StrCmp{
{"1", "1", true}, {"1", "1", true},
{"10", "10.0", true}, {"1.0", "1.0", true},
{"1.1", "1.10", true}, {"10", "10.0", false},
{"1.1", "1.10", false},
{"1.001", "1.01", false}, {"1.001", "1.01", false},
} }