strconv: fix %.2g, 40
Fixes #845.
R=rsc
CC=golang-dev
https://golang.org/cl/1673049
diff --git a/src/pkg/strconv/ftoa.go b/src/pkg/strconv/ftoa.go
index 656d81c..3659243 100644
--- a/src/pkg/strconv/ftoa.go
+++ b/src/pkg/strconv/ftoa.go
@@ -154,21 +154,27 @@
case 'f':
return fmtF(neg, d, prec)
case 'g', 'G':
- // trailing zeros are removed.
- if prec > d.nd {
- prec = d.nd
+ // trailing fractional zeros in 'e' form will be trimmed.
+ eprec := prec
+ if eprec > d.nd && d.nd >= d.dp {
+ eprec = d.nd
}
// %e is used if the exponent from the conversion
// is less than -4 or greater than or equal to the precision.
// if precision was the shortest possible, use precision 6 for this decision.
- eprec := prec
if shortest {
eprec = 6
}
exp := d.dp - 1
if exp < -4 || exp >= eprec {
+ if prec > d.nd {
+ prec = d.nd
+ }
return fmtE(neg, d, prec-1, fmt+'e'-'g')
}
+ if prec > d.dp {
+ prec = d.nd
+ }
return fmtF(neg, d, max(prec-d.dp, 0))
}