From 02e2044944ccd91e819dcc75d7d17d30ff0a2eab Mon Sep 17 00:00:00 2001 From: Jason Biegel Date: Thu, 27 Feb 2020 15:28:08 -0500 Subject: [PATCH] Revert remove insignificant digits (#159) * revert original remove insignificant change (PR 46), and add the logic back as a function --- decimal.go | 10 +++------- decimal_test.go | 5 +++-- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/decimal.go b/decimal.go index 7a67c8c..b78581b 100644 --- a/decimal.go +++ b/decimal.go @@ -153,13 +153,8 @@ func NewFromString(value string) (Decimal, error) { // an int intString = value } else if len(parts) == 2 { - // strip the insignificant digits for more accurate comparisons. - decimalPart := strings.TrimRight(parts[1], "0") - intString = parts[0] + decimalPart - if intString == "" && parts[1] != "" { - intString = "0" - } - expInt := -len(decimalPart) + intString = parts[0] + parts[1] + expInt := -len(parts[1]) exp += int64(expInt) } else { 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{ value: iVal, } + // TODO: optimize those calculations to reduce the high allocations (~29 allocs). return d.Mul(dVal).Round(0).Div(dVal).Truncate(2) } diff --git a/decimal_test.go b/decimal_test.go index 43a51bf..c684335 100644 --- a/decimal_test.go +++ b/decimal_test.go @@ -310,8 +310,9 @@ func TestNewFromStringDeepEquals(t *testing.T) { } tests := []StrCmp{ {"1", "1", true}, - {"10", "10.0", true}, - {"1.1", "1.10", true}, + {"1.0", "1.0", true}, + {"10", "10.0", false}, + {"1.1", "1.10", false}, {"1.001", "1.01", false}, }