Fix handling of hexfloat

This commit is contained in:
Victor Zverovich 2019-06-12 20:03:56 -07:00
parent 92a44db11c
commit cbbee1b385
2 changed files with 17 additions and 14 deletions

View File

@ -786,7 +786,7 @@ void sprintf_format(Double value, internal::buffer<char>& buf,
// Find the decimal point. // Find the decimal point.
auto p = buf.data(), end = p + n; auto p = buf.data(), end = p + n;
if (*p == '+' || *p == '-') ++p; if (*p == '+' || *p == '-') ++p;
if (spec.type == 'a' || spec.type == 'A') p += 2; // Skip "0x". if (spec.type != 'a' && spec.type != 'A') {
while (p < end && *p >= '0' && *p <= '9') ++p; while (p < end && *p >= '0' && *p <= '9') ++p;
if (p < end && *p != 'e' && *p != 'E') { if (p < end && *p != 'e' && *p != 'E') {
if (*p != '.') *p = '.'; if (*p != '.') *p = '.';
@ -803,6 +803,7 @@ void sprintf_format(Double value, internal::buffer<char>& buf,
} }
} }
} }
}
buf.resize(n); buf.resize(n);
break; // The buffer is large enough - continue with formatting. break; // The buffer is large enough - continue with formatting.
} }

View File

@ -1506,6 +1506,8 @@ TEST(FormatterTest, FormatLongDouble) {
safe_sprintf(buffer, "%Le", 392.65l); safe_sprintf(buffer, "%Le", 392.65l);
EXPECT_EQ(buffer, format("{0:e}", 392.65l)); EXPECT_EQ(buffer, format("{0:e}", 392.65l));
EXPECT_EQ("+0000392.6", format("{0:+010.4g}", 392.64l)); EXPECT_EQ("+0000392.6", format("{0:+010.4g}", 392.64l));
safe_sprintf(buffer, "%La", 3.31l);
EXPECT_EQ(buffer, format("{:a}", 3.31l));
} }
TEST(FormatterTest, FormatChar) { TEST(FormatterTest, FormatChar) {