]> Cypherpunks repositories - gostls13.git/commitdiff
fix %g 20 -> "2e+01" want "20"
authorRuss Cox <rsc@golang.org>
Mon, 24 Nov 2008 01:27:44 +0000 (17:27 -0800)
committerRuss Cox <rsc@golang.org>
Mon, 24 Nov 2008 01:27:44 +0000 (17:27 -0800)
R=r
DELTA=11  (10 added, 0 deleted, 1 changed)
OCL=19885
CL=19887

src/lib/strconv/ftoa.go
src/lib/strconv/ftoa_test.go

index 5dd057d494fa23204a69c5421c1b5096c31ae32e..c1c8af3179052786d3aa3eeb586eb7e67c160db8 100644 (file)
@@ -94,7 +94,9 @@ func GenericFtoa(bits uint64, fmt byte, prec int, flt *FloatInfo) string {
 
        // Round appropriately.
        // Negative precision means "only as much as needed to be exact."
+       shortest := false;
        if prec < 0 {
+               shortest = true;
                RoundShortest(d, mant, exp, flt);
                switch fmt {
                case 'e':
@@ -130,8 +132,13 @@ func GenericFtoa(bits uint64, fmt byte, prec int, flt *FloatInfo) string {
                }
                // %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 >= prec {
+               if exp < -4 || exp >= eprec {
                        return FmtE(neg, d, prec - 1);
                }
                return FmtF(neg, d, Max(prec - d.dp, 0));
index a85a1a116029cae2a5009fe650798065723656dc..914ecd9e33c0f3d5040b623b998ae63d757c8620 100644 (file)
@@ -24,6 +24,9 @@ var ftests = []Test {
        Test{ 1, 'f', 5, "1.00000" },
        Test{ 1, 'g', 5, "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, 'f', 5, "0.00000" },