Commit 0e198da6 authored by Russ Cox's avatar Russ Cox

fix %g 20 -> "2e+01" want "20"

R=r
DELTA=11  (10 added, 0 deleted, 1 changed)
OCL=19885
CL=19887
parent a6182dab
...@@ -94,7 +94,9 @@ func GenericFtoa(bits uint64, fmt byte, prec int, flt *FloatInfo) string { ...@@ -94,7 +94,9 @@ func GenericFtoa(bits uint64, fmt byte, prec int, flt *FloatInfo) string {
// Round appropriately. // Round appropriately.
// Negative precision means "only as much as needed to be exact." // Negative precision means "only as much as needed to be exact."
shortest := false;
if prec < 0 { if prec < 0 {
shortest = true;
RoundShortest(d, mant, exp, flt); RoundShortest(d, mant, exp, flt);
switch fmt { switch fmt {
case 'e': case 'e':
...@@ -130,8 +132,13 @@ func GenericFtoa(bits uint64, fmt byte, prec int, flt *FloatInfo) string { ...@@ -130,8 +132,13 @@ func GenericFtoa(bits uint64, fmt byte, prec int, flt *FloatInfo) string {
} }
// %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.
eprec := prec;
if shortest {
eprec = 6
}
exp := d.dp - 1; exp := d.dp - 1;
if exp < -4 || exp >= prec { if exp < -4 || exp >= eprec {
return FmtE(neg, d, prec - 1); return FmtE(neg, d, prec - 1);
} }
return FmtF(neg, d, Max(prec - d.dp, 0)); return FmtF(neg, d, Max(prec - d.dp, 0));
......
...@@ -24,6 +24,9 @@ var ftests = []Test { ...@@ -24,6 +24,9 @@ var ftests = []Test {
Test{ 1, 'f', 5, "1.00000" }, Test{ 1, 'f', 5, "1.00000" },
Test{ 1, 'g', 5, "1" }, Test{ 1, 'g', 5, "1" },
Test{ 1, 'g', -1, "1" }, Test{ 1, 'g', -1, "1" },
Test{ 20, 'g', -1, "20" },
Test{ 200000, 'g', -1, "200000" },
Test{ 2000000, 'g', -1, "2e+06" },
Test{ 0, 'e', 5, "0.00000e+00" }, Test{ 0, 'e', 5, "0.00000e+00" },
Test{ 0, 'f', 5, "0.00000" }, Test{ 0, 'f', 5, "0.00000" },
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment