Respect min_exponent_width when exponent is 0 (#148)

diff --git a/double-conversion/double-to-string.cc b/double-conversion/double-to-string.cc
index 4562f99..d9be42d 100644
--- a/double-conversion/double-to-string.cc
+++ b/double-conversion/double-to-string.cc
@@ -92,19 +92,19 @@
       result_builder->AddCharacter('+');
     }
   }
-  if (exponent == 0) {
-    result_builder->AddCharacter('0');
-    return;
-  }
   DOUBLE_CONVERSION_ASSERT(exponent < 1e4);
   // Changing this constant requires updating the comment of DoubleToStringConverter constructor
   const int kMaxExponentLength = 5;
   char buffer[kMaxExponentLength + 1];
   buffer[kMaxExponentLength] = '\0';
   int first_char_pos = kMaxExponentLength;
-  while (exponent > 0) {
-    buffer[--first_char_pos] = '0' + (exponent % 10);
-    exponent /= 10;
+  if (exponent == 0) {
+    buffer[--first_char_pos] = '0';
+  } else {
+    while (exponent > 0) {
+      buffer[--first_char_pos] = '0' + (exponent % 10);
+      exponent /= 10;
+    }
   }
   // Add prefix '0' to make exponent width >= min(min_exponent_with_, kMaxExponentLength)
   // For example: convert 1e+9 -> 1e+09, if min_exponent_with_ is set to 2
diff --git a/test/cctest/test-conversions.cc b/test/cctest/test-conversions.cc
index 650154b..c117aa7 100644
--- a/test/cctest/test-conversions.cc
+++ b/test/cctest/test-conversions.cc
@@ -861,6 +861,33 @@
   builder.Reset();
   CHECK(dc4.ToExponential(-Double::NaN(), 1, &builder));
   CHECK_EQ("NaN", builder.Finalize());
+
+  // Test min_exponent_width
+  DoubleToStringConverter dc5(flags, NULL, NULL, 'e', 0, 0, 0, 0, 2);
+
+  builder.Reset();
+  CHECK(dc5.ToExponential(11111111111.0, 6, &builder));
+  CHECK_EQ("1.111111e10", builder.Finalize());
+
+  builder.Reset();
+  CHECK(dc5.ToExponential(1111111111.0, 6, &builder));
+  CHECK_EQ("1.111111e09", builder.Finalize());
+
+  builder.Reset();
+  CHECK(dc5.ToExponential(1111111.0, 6, &builder));
+  CHECK_EQ("1.111111e06", builder.Finalize());
+
+  builder.Reset();
+  CHECK(dc5.ToExponential(10000000000.0, 6, &builder));
+  CHECK_EQ("1.000000e10", builder.Finalize());
+
+  builder.Reset();
+  CHECK(dc5.ToExponential(1000000000.0, 6, &builder));
+  CHECK_EQ("1.000000e09", builder.Finalize());
+
+  builder.Reset();
+  CHECK(dc5.ToExponential(1.0, 6, &builder));
+  CHECK_EQ("1.000000e00", builder.Finalize());
 }