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)