From 6eb5468c627fb6e7f140cb592c380a5f981610d8 Mon Sep 17 00:00:00 2001 From: Elias Van Ootegem Date: Tue, 23 Jul 2024 15:58:20 +0100 Subject: [PATCH] fix: increase default precision to 18 decimals to match precision of assets like ETH Signed-off-by: Elias Van Ootegem --- decimal.go | 8 ++++---- decimal_test.go | 54 ++++++++++++++++++++++++------------------------- 2 files changed, 31 insertions(+), 31 deletions(-) diff --git a/decimal.go b/decimal.go index 1c3ddca..b307a17 100644 --- a/decimal.go +++ b/decimal.go @@ -33,15 +33,15 @@ import ( // Example: // // d1 := decimal.NewFromFloat(2).Div(decimal.NewFromFloat(3)) -// d1.String() // output: "0.6666666666666667" +// d1.String() // output: "0.666666666666666667" // d2 := decimal.NewFromFloat(2).Div(decimal.NewFromFloat(30000)) -// d2.String() // output: "0.0000666666666667" +// d2.String() // output: "0.000066666666666667" // d3 := decimal.NewFromFloat(20000).Div(decimal.NewFromFloat(3)) -// d3.String() // output: "6666.6666666666666667" +// d3.String() // output: "6666.666666666666666667" // decimal.DivisionPrecision = 3 // d4 := decimal.NewFromFloat(2).Div(decimal.NewFromFloat(3)) // d4.String() // output: "0.667" -var DivisionPrecision = 16 +var DivisionPrecision = 18 // PowPrecisionNegativeExponent specifies the maximum precision of the result (digits after decimal point) // when calculating decimal power. Only used for cases where the exponent is a negative number. diff --git a/decimal_test.go b/decimal_test.go index d247f8f..302ce37 100644 --- a/decimal_test.go +++ b/decimal_test.go @@ -1841,13 +1841,13 @@ func TestDecimal_Div(t *testing.T) { {"2.2", "1.1"}: "2", {"-2.2", "-1.1"}: "2", {"12.88", "5.6"}: "2.3", - {"1023427554493", "43432632"}: "23563.5628642767953828", // rounded - {"1", "434324545566634"}: "0.0000000000000023", - {"1", "3"}: "0.3333333333333333", - {"2", "3"}: "0.6666666666666667", // rounded - {"10000", "3"}: "3333.3333333333333333", - {"10234274355545544493", "-3"}: "-3411424785181848164.3333333333333333", - {"-4612301402398.4753343454", "23.5"}: "-196268144782.9138440146978723", + {"1023427554493", "43432632"}: "23563.56286427679538279", // rounded + {"1", "434324545566634"}: "0.000000000000002302", + {"1", "3"}: "0.333333333333333333", + {"2", "3"}: "0.666666666666666667", // rounded + {"10000", "3"}: "3333.333333333333333333", + {"10234274355545544493", "-3"}: "-3411424785181848164.333333333333333333", + {"-4612301402398.4753343454", "23.5"}: "-196268144782.91384401469787234", } for inp, expectedStr := range inputs { @@ -1880,10 +1880,10 @@ func TestDecimal_Div(t *testing.T) { // test code path where exp > 0 inputs2 := map[Inp2]string{ - {124, 10, 3, 1}: "41333333333.3333333333333333", - {124, 10, 3, 0}: "413333333333.3333333333333333", - {124, 10, 6, 1}: "20666666666.6666666666666667", - {124, 10, 6, 0}: "206666666666.6666666666666667", + {124, 10, 3, 1}: "41333333333.333333333333333333", + {124, 10, 3, 0}: "413333333333.333333333333333333", + {124, 10, 6, 1}: "20666666666.666666666666666667", + {124, 10, 6, 0}: "206666666666.666666666666666667", {10, 10, 10, 1}: "1000000000", } @@ -3465,15 +3465,15 @@ func TestAtan(t *testing.T) { "11000020.2407442310156021090304691671842603586882014729198302312846062338790031898128063403419218957424", } sols := []string{ - "-1.24076438822058001027437062753106", - "-0.78539816339744833061616997868383", - "-0.24497866312686415", + "-1.240764388220579999547768369366663257", + "-0.78539816339744828061616997868383", + "-0.24497866312686415525", "0.0", - "0.318747560420644443", - "0.78539816339744833061616997868383", - "1.37340076694501580123233995736766", - "1.47112767430373453123233995736766", - "1.57079623588597296123259450235374", + "0.31874756042064443706", + "0.78539816339744828061616997868383", + "1.37340076694501580283233995736766", + "1.47112767430373453363233995736766", + "1.570796235885972930232590411452263405", } for i, inp := range inps { d, err := NewFromString(inp) @@ -3585,15 +3585,15 @@ func TestTan(t *testing.T) { "11000020.2407442310156021090304691671842603586882014729198302312846062338790031898128063403419218957424", } sols := []string{ - "0.2261415650505790298980791606748881031998682652", - "-1.5574077246549025", - "-0.255341921221036275", + "0.226141565050579040350913677374961771568775128386", + "-1.557407724654902476", + "-0.2553419212210362665", "0.0", - "0.342524867530038963", - "1.5574077246549025", - "-3.3805150062465829", - "0.6483608274590872485524085572681343280321117494", - "0.68351325561491170753499935023939368502774607234006019034769919811202010905597996164029250820702097041244539696", + "0.34252486753003894782", + "1.557407724654902476", + "-3.380515006246583017", + "0.64836082745908726868517993033985905508029854441", + "0.6835132556149117039375485965437720350182539298544980382184903605930387213483425583662733693301829283609140225056", } for i, inp := range inps { d, err := NewFromString(inp)