internal/number: fix rounding with DigitShift
Change-Id: I52454e27295200f1afcfea471f5020257af6d13b
Reviewed-on: https://go-review.googlesource.com/60590
Run-TryBot: Marcel van Lohuizen <mpvl@golang.org>
Reviewed-by: Nigel Tao <nigeltao@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
diff --git a/internal/number/decimal.go b/internal/number/decimal.go
index f15b257..221a8b1 100644
--- a/internal/number/decimal.go
+++ b/internal/number/decimal.go
@@ -420,12 +420,13 @@
if r.MaxIntegerDigits == 1 && (r.MaxSignificantDigits == 0 ||
int(r.MaxFractionDigits+1) == int(r.MaxSignificantDigits)) {
verb = 'e'
+ // Note: don't add DigitShift: it is only used for decimals.
prec = int(r.MaxFractionDigits)
prec += int(r.DigitShift)
}
} else if r.MaxFractionDigits > 0 && r.MaxSignificantDigits == 0 {
verb = 'f'
- prec = int(r.MaxFractionDigits)
+ prec = int(r.MaxFractionDigits) + int(r.DigitShift)
}
}
diff --git a/internal/number/decimal_test.go b/internal/number/decimal_test.go
index fb856c8..f13b7c1 100644
--- a/internal/number/decimal_test.go
+++ b/internal/number/decimal_test.go
@@ -250,6 +250,7 @@
inc50 := RoundingContext{Increment: 50}
prec3 := RoundingContext{}
prec3.SetPrecision(3)
+ roundShift := RoundingContext{DigitShift: 2, MaxFractionDigits: 2}
testCases := []struct {
x interface{}
rc RoundingContext
@@ -278,6 +279,10 @@
{325, inc50, "300"},
{375, inc50, "400"},
+ // Here the scale is 2, but the digits get shifted left. As we use
+ // AppendFloat to do the rounding an exta 0 gets added.
+ {0.123, roundShift, "0.1230"},
+
{converter(3), scale2, "100"},
{math.Inf(1), inc50, "Inf"},