diff --git a/include/fmt/format.h b/include/fmt/format.h index 0e8fb2e4..e426f3bc 100644 --- a/include/fmt/format.h +++ b/include/fmt/format.h @@ -1213,6 +1213,8 @@ It grisu2_prettify(const char* digits, int size, int exp, It it, if (params.num_digits >= 0 && params.num_digits < num_zeros) num_zeros = params.num_digits; it = std::fill_n(it, num_zeros, static_cast('0')); + if (!params.trailing_zeros) + while (size > 0 && digits[size - 1] == '0') --size; it = copy_str(digits, digits + size, it); } return it; diff --git a/test/format-test.cc b/test/format-test.cc index 94ebcdd5..6cd1b136 100644 --- a/test/format-test.cc +++ b/test/format-test.cc @@ -1488,6 +1488,7 @@ TEST(FormatterTest, PrecisionRounding) { EXPECT_EQ("0.002", format("{:.3f}", 0.0015)); EXPECT_EQ("1.000", format("{:.3f}", 0.9999)); EXPECT_EQ("0.00123", format("{:.3}", 0.00123)); + EXPECT_EQ("0.1", format("{:.16g}", 0.1)); // Trigger rounding error in Grisu by a carefully chosen number. auto n = 3788512123356.985352; char buffer[64];