mirror of
https://github.com/golang/go
synced 2024-11-12 06:30:21 -07:00
strconv: fix %.2g, 40
Fixes #845. R=rsc CC=golang-dev https://golang.org/cl/1673049
This commit is contained in:
parent
1246ad8390
commit
21f8ae8fec
@ -154,21 +154,27 @@ func genericFtoa(bits uint64, fmt byte, prec int, flt *floatInfo) string {
|
|||||||
case 'f':
|
case 'f':
|
||||||
return fmtF(neg, d, prec)
|
return fmtF(neg, d, prec)
|
||||||
case 'g', 'G':
|
case 'g', 'G':
|
||||||
// trailing zeros are removed.
|
// trailing fractional zeros in 'e' form will be trimmed.
|
||||||
if prec > d.nd {
|
eprec := prec
|
||||||
prec = d.nd
|
if eprec > d.nd && d.nd >= d.dp {
|
||||||
|
eprec = d.nd
|
||||||
}
|
}
|
||||||
// %e is used if the exponent from the conversion
|
// %e is used if the exponent from the conversion
|
||||||
// is less than -4 or greater than or equal to the precision.
|
// is less than -4 or greater than or equal to the precision.
|
||||||
// if precision was the shortest possible, use precision 6 for this decision.
|
// if precision was the shortest possible, use precision 6 for this decision.
|
||||||
eprec := prec
|
|
||||||
if shortest {
|
if shortest {
|
||||||
eprec = 6
|
eprec = 6
|
||||||
}
|
}
|
||||||
exp := d.dp - 1
|
exp := d.dp - 1
|
||||||
if exp < -4 || exp >= eprec {
|
if exp < -4 || exp >= eprec {
|
||||||
|
if prec > d.nd {
|
||||||
|
prec = d.nd
|
||||||
|
}
|
||||||
return fmtE(neg, d, prec-1, fmt+'e'-'g')
|
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))
|
return fmtF(neg, d, max(prec-d.dp, 0))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -34,6 +34,17 @@ var ftoatests = []ftoaTest{
|
|||||||
ftoaTest{200000, 'g', -1, "200000"},
|
ftoaTest{200000, 'g', -1, "200000"},
|
||||||
ftoaTest{2000000, 'g', -1, "2e+06"},
|
ftoaTest{2000000, 'g', -1, "2e+06"},
|
||||||
|
|
||||||
|
// g conversion and zero suppression
|
||||||
|
ftoaTest{400, 'g', 2, "4e+02"},
|
||||||
|
ftoaTest{40, 'g', 2, "40"},
|
||||||
|
ftoaTest{4, 'g', 2, "4"},
|
||||||
|
ftoaTest{.4, 'g', 2, "0.4"},
|
||||||
|
ftoaTest{.04, 'g', 2, "0.04"},
|
||||||
|
ftoaTest{.004, 'g', 2, "0.004"},
|
||||||
|
ftoaTest{.0004, 'g', 2, "0.0004"},
|
||||||
|
ftoaTest{.00004, 'g', 2, "4e-05"},
|
||||||
|
ftoaTest{.000004, 'g', 2, "4e-06"},
|
||||||
|
|
||||||
ftoaTest{0, 'e', 5, "0.00000e+00"},
|
ftoaTest{0, 'e', 5, "0.00000e+00"},
|
||||||
ftoaTest{0, 'f', 5, "0.00000"},
|
ftoaTest{0, 'f', 5, "0.00000"},
|
||||||
ftoaTest{0, 'g', 5, "0"},
|
ftoaTest{0, 'g', 5, "0"},
|
||||||
|
Loading…
Reference in New Issue
Block a user