diff --git a/entities/fraction.go b/entities/fraction.go index ee8cfc6..53a258f 100644 --- a/entities/fraction.go +++ b/entities/fraction.go @@ -120,7 +120,7 @@ func (f *Fraction) Divide(other *Fraction) *Fraction { func (f *Fraction) ToSignificant(significantDigits uint, opt ...number.Option) string { f.opts = number.New(number.WithGroupSeparator('\xA0'), number.WithRoundingMode(constants.RoundHalfUp)) f.opts.Apply(opt...) - f.opts.Apply(number.WithRoundingPrecision(int(significantDigits) + 1)) + f.opts.Apply(number.WithRoundingPrecision(int(significantDigits))) d := decimal.NewFromBigInt(f.Numerator, 0).Div(decimal.NewFromBigInt(f.Denominator, 0)) if v, err := number.DecimalRound(d, f.opts); err == nil { diff --git a/entities/fraction_test.go b/entities/fraction_test.go index cdfd706..e494f1f 100644 --- a/entities/fraction_test.go +++ b/entities/fraction_test.go @@ -198,9 +198,11 @@ func TestToSignificant(t *testing.T) { Format uint }{ {[2]int64{30, 10}, "3", 0}, - {[2]int64{4, 10}, "0.4", 0}, - {[2]int64{126, 100}, "1.26", 1}, - {[2]int64{1, 1000}, "0.001", 2}, + {[2]int64{4, 10}, "0.4", 1}, + {[2]int64{126, 100}, "1.3", 1}, + {[2]int64{126, 100}, "1.26", 2}, + {[2]int64{124, 100}, "1.2", 1}, + {[2]int64{124, 100}, "1.24", 2}, } for i, test := range tests { output := NewFraction(big.NewInt(test.Input[0]), big.NewInt(test.Input[1])).ToSignificant(test.Format) diff --git a/number/number_test.go b/number/number_test.go index 02a4958..1d2f56e 100644 --- a/number/number_test.go +++ b/number/number_test.go @@ -745,9 +745,10 @@ func TestDecimalFormat(t *testing.T) { }, } - for _, tt := range tests { + for i, tt := range tests { if got := DecimalFormat(tt.args.d, tt.args.opts); got != tt.want { - t.Errorf("DecimalFormat() = %v, want %v", got, tt.want) + t.Errorf("DecimalFormat([%d]{d:[%+v], opts:[%+v]}) got = %v, want %v", i, tt.args.d.String(), tt.args.opts, + got, tt.want) } } } @@ -771,9 +772,9 @@ func TestDecimalRound(t *testing.T) { { args: args{ d: mustNewFromString("0.00001000"), - opts: New(WithRoundingPrecision(2), WithRoundingMode(constants.RoundUp)), + opts: New(WithRoundingPrecision(4), WithRoundingMode(constants.RoundUp)), }, - want: mustNewFromString("0.01"), + want: mustNewFromString("0.0001"), }, { args: args{ @@ -806,9 +807,9 @@ func TestDecimalRound(t *testing.T) { { args: args{ d: mustNewFromString("-0.05"), - opts: New(WithRoundingPrecision(0), WithRoundingMode(constants.RoundUp)), + opts: New(WithRoundingPrecision(1), WithRoundingMode(constants.RoundUp)), }, - want: mustNewFromString("-1"), + want: mustNewFromString("-0.1"), }, { args: args{ @@ -1735,14 +1736,15 @@ func TestDecimalRound(t *testing.T) { want: mustNewFromString("2988347090930431122495200201632971168964831173901728"), }, } - for _, tt := range tests { + for i, tt := range tests { got, err := DecimalRound(tt.args.d, tt.args.opts) if err != nil { t.Fatal(err) } if got.String() != tt.want.String() { - t.Errorf("DecimalRound() got = %v, want %v", got.String(), tt.want.String()) + t.Errorf("DecimalRound([%d]{d:[%+v], opts:[%+v]}) got = %v, want %v", i, tt.args.d.String(), tt.args.opts, + got.String(), tt.want.String()) } } }