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"},