mirror of
https://github.com/fmtlib/fmt.git
synced 2025-07-30 18:57:34 +02:00
Fix handling of missing fraction in snprintf_float
This commit is contained in:
@ -1198,17 +1198,17 @@ int snprintf_float(T value, int precision, float_specs specs,
|
|||||||
exp = exp * 10 + (*p++ - '0');
|
exp = exp * 10 + (*p++ - '0');
|
||||||
} while (p != end);
|
} while (p != end);
|
||||||
if (sign == '-') exp = -exp;
|
if (sign == '-') exp = -exp;
|
||||||
|
int fraction_size = 0;
|
||||||
if (exp_pos != begin + 1) {
|
if (exp_pos != begin + 1) {
|
||||||
// Remove trailing zeros.
|
// Remove trailing zeros.
|
||||||
auto fraction_end = exp_pos - 1;
|
auto fraction_end = exp_pos - 1;
|
||||||
while (*fraction_end == '0') --fraction_end;
|
while (*fraction_end == '0') --fraction_end;
|
||||||
// Move the fractional part left to get rid of the decimal point.
|
// Move the fractional part left to get rid of the decimal point.
|
||||||
int fraction_size = static_cast<int>(fraction_end - begin - 1);
|
fraction_size = static_cast<int>(fraction_end - begin - 1);
|
||||||
std::memmove(begin + 1, begin + 2, fraction_size);
|
std::memmove(begin + 1, begin + 2, fraction_size);
|
||||||
buf.resize(fraction_size + offset + 1);
|
|
||||||
exp -= fraction_size;
|
|
||||||
}
|
}
|
||||||
return exp;
|
buf.resize(fraction_size + offset + 1);
|
||||||
|
return exp - fraction_size;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} // namespace internal
|
} // namespace internal
|
||||||
|
@ -1203,6 +1203,7 @@ TEST(FormatterTest, Precision) {
|
|||||||
EXPECT_EQ("1.2", format("{0:.2}", 1.2345));
|
EXPECT_EQ("1.2", format("{0:.2}", 1.2345));
|
||||||
EXPECT_EQ("1.2", format("{0:.2}", 1.2345l));
|
EXPECT_EQ("1.2", format("{0:.2}", 1.2345l));
|
||||||
EXPECT_EQ("1.2e+56", format("{:.2}", 1.234e56));
|
EXPECT_EQ("1.2e+56", format("{:.2}", 1.234e56));
|
||||||
|
EXPECT_EQ("1e+00", format("{:.0e}", 1.0L));
|
||||||
EXPECT_EQ(
|
EXPECT_EQ(
|
||||||
"4.9406564584124654417656879286822137236505980261432476442558568250067550"
|
"4.9406564584124654417656879286822137236505980261432476442558568250067550"
|
||||||
"727020875186529983636163599237979656469544571773092665671035593979639877"
|
"727020875186529983636163599237979656469544571773092665671035593979639877"
|
||||||
|
Reference in New Issue
Block a user