Fix handling of small precision in general format

This commit is contained in:
Victor Zverovich 2020-03-24 09:01:57 -07:00
parent 01a172c969
commit 69779b4ed6
2 changed files with 5 additions and 2 deletions

View File

@ -1152,9 +1152,11 @@ template <typename Char> class float_writer {
// 1234e-6 -> 0.001234 // 1234e-6 -> 0.001234
*it++ = static_cast<Char>('0'); *it++ = static_cast<Char>('0');
int num_zeros = -full_exp; int num_zeros = -full_exp;
if (specs_.precision >= 0 && specs_.precision < num_zeros)
num_zeros = specs_.precision;
int num_digits = num_digits_; int num_digits = num_digits_;
if (num_digits == 0 && specs_.precision >= 0 &&
specs_.precision < num_zeros) {
num_zeros = specs_.precision;
}
// Remove trailing zeros. // Remove trailing zeros.
if (!specs_.showpoint) if (!specs_.showpoint)
while (num_digits > 0 && digits_[num_digits - 1] == '0') --num_digits; while (num_digits > 0 && digits_[num_digits - 1] == '0') --num_digits;

View File

@ -1125,6 +1125,7 @@ TEST(FormatterTest, Precision) {
format("{:.838A}", -2.14001164E+38)); format("{:.838A}", -2.14001164E+38));
EXPECT_EQ("123.", format("{:#.0f}", 123.0)); EXPECT_EQ("123.", format("{:#.0f}", 123.0));
EXPECT_EQ("1.23", format("{:.02f}", 1.234)); EXPECT_EQ("1.23", format("{:.02f}", 1.234));
EXPECT_EQ("0.001", format("{:.1g}", 0.001));
EXPECT_THROW_MSG(format("{0:.2}", reinterpret_cast<void*>(0xcafe)), EXPECT_THROW_MSG(format("{0:.2}", reinterpret_cast<void*>(0xcafe)),
format_error, format_error,