internal/number: allow negative zero

This is consistent with fmt

Change-Id: I7913f127e3b9d361f34857c4db0062f61d6e72c3
Reviewed-on: https://go-review.googlesource.com/46471
Run-TryBot: Marcel van Lohuizen <mpvl@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Nigel Tao <nigeltao@golang.org>
diff --git a/internal/number/decimal.go b/internal/number/decimal.go
index f0a5777..f6828ef 100644
--- a/internal/number/decimal.go
+++ b/internal/number/decimal.go
@@ -99,10 +99,9 @@
 		buf = append(buf, "Inf"...)
 		return string(buf)
 	}
-	if len(x.Digits) == 0 {
-		return "0"
-	}
 	switch {
+	case len(x.Digits) == 0:
+		buf = append(buf, '0')
 	case x.Exp <= 0:
 		// 0.00ddd
 		buf = append(buf, "0."...)
diff --git a/internal/number/decimal_test.go b/internal/number/decimal_test.go
index b99fedc..5c81700 100644
--- a/internal/number/decimal_test.go
+++ b/internal/number/decimal_test.go
@@ -195,13 +195,10 @@
 		negModes := tc.modes
 		negModes[1], negModes[6] = negModes[6], negModes[1]
 		for i, res := range negModes {
-			if res != "0" {
-				negModes[i] = "-" + res
-			}
+			negModes[i] = "-" + res
 		}
-
 		for i, m := range modes {
-			t.Run(fmt.Sprintf("v:%s/n:%d/%s", tc.x, tc.n, m), func(t *testing.T) {
+			t.Run(fmt.Sprintf("x:%s/n:%d/%s", tc.x, tc.n, m), func(t *testing.T) {
 				d := mkdec(tc.x)
 				d.round(m, tc.n)
 				if got := d.String(); got != tc.modes[i] {
@@ -224,9 +221,7 @@
 					t.Errorf("neg decimal: got %q; want %q", d.String(), want)
 				}
 
-				if f = mkfloat(tc.x); f != 0 {
-					f = -f // avoid creating -0.0
-				}
+				f = -mkfloat(tc.x)
 				f = m.roundFloat(f/mult) * mult
 				if got := fmt.Sprintf("%.0f", f); got != negModes[i] {
 					t.Errorf("neg float: got %q; want %q", got, negModes[i])
@@ -257,6 +252,8 @@
 		{uint32(234), scale2, "234"},
 		{uint64(234), scale2, "234"},
 		{uint(234), scale2, "234"},
+		{-0.001, scale2, "-0"},
+		{-1e9, scale2, "-1000000000.00"},
 		{0.234, scale2, "0.23"},
 		{0.234, scale2away, "0.24"},
 		{0.1234, prec3, "0.123"},
diff --git a/internal/number/format.go b/internal/number/format.go
index 12553b6..2985ef5 100755
--- a/internal/number/format.go
+++ b/internal/number/format.go
@@ -190,7 +190,7 @@
 		}
 	}
 
-	neg := d.Neg && numInt+numFrac > 0
+	neg := d.Neg
 	affix, suffix := f.getAffixes(neg)
 	dst = appendAffix(dst, f, affix, neg)
 	savedLen := len(dst)
@@ -289,7 +289,7 @@
 	} else {
 		intDigits = digits
 	}
-	neg := d.Neg && len(digits) > 0
+	neg := d.Neg
 	affix, suffix := f.getAffixes(neg)
 	dst = appendAffix(dst, f, affix, neg)
 	savedLen := len(dst)