Fix fixed precision handling when rounding (#1917)

This commit is contained in:
Victor Zverovich 2020-10-07 07:42:23 -07:00
parent 7277035736
commit a18b3fbbdc
2 changed files with 4 additions and 2 deletions

View File

@ -1626,7 +1626,8 @@ struct fixed_handler {
} }
if (buf[0] > '9') { if (buf[0] > '9') {
buf[0] = '1'; buf[0] = '1';
buf[size++] = '0'; if (fixed) buf[size++] = '0';
else ++exp10;
} }
return digits::done; return digits::done;
} }
@ -2466,7 +2467,7 @@ int format_float(T value, int precision, float_specs specs, buffer<char>& buf) {
exp += handler.size - cached_exp10 - 1; exp += handler.size - cached_exp10 - 1;
fallback_format(value, handler.precision, specs.binary32, buf, exp); fallback_format(value, handler.precision, specs.binary32, buf, exp);
} else { } else {
exp -= cached_exp10; exp += handler.exp10;
buf.try_resize(to_unsigned(handler.size)); buf.try_resize(to_unsigned(handler.size));
} }
if (!fixed && !specs.showpoint) { if (!fixed && !specs.showpoint) {

View File

@ -957,6 +957,7 @@ TEST(FormatterTest, Precision) {
EXPECT_EQ("0.001", format("{:.1g}", 0.001)); EXPECT_EQ("0.001", format("{:.1g}", 0.001));
EXPECT_EQ("1019666400", format("{}", 1019666432.0f)); EXPECT_EQ("1019666400", format("{}", 1019666432.0f));
EXPECT_EQ("1e+01", format("{:.0e}", 9.5)); EXPECT_EQ("1e+01", format("{:.0e}", 9.5));
EXPECT_EQ("1.0e-34", fmt::format("{:.1e}", 1e-34));
EXPECT_THROW_MSG(format("{0:.2}", reinterpret_cast<void*>(0xcafe)), EXPECT_THROW_MSG(format("{0:.2}", reinterpret_cast<void*>(0xcafe)),
format_error, format_error,