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());
}