Skip to content

Commit ff4ddd1

Browse files
phprushappymonkey1
authored andcommitted
Fix group_digits for negative integers (fmtlib#3901)
Signed-off-by: Vladislav Shchapov <[email protected]>
1 parent 08273ee commit ff4ddd1

File tree

2 files changed

+7
-3
lines changed

2 files changed

+7
-3
lines changed

Diff for: include/fmt/format.h

+4-3
Original file line numberDiff line numberDiff line change
@@ -4130,9 +4130,10 @@ template <typename T> struct formatter<group_digits_view<T>> : formatter<T> {
41304130
specs.width_ref, ctx);
41314131
detail::handle_dynamic_spec<detail::precision_checker>(
41324132
specs.precision, specs.precision_ref, ctx);
4133-
return detail::write_int(ctx.out(),
4134-
static_cast<detail::uint64_or_128_t<T>>(t.value),
4135-
0, specs, detail::digit_grouping<char>("\3", ","));
4133+
auto arg = detail::make_write_int_arg(t.value, specs.sign);
4134+
return detail::write_int(
4135+
ctx.out(), static_cast<detail::uint64_or_128_t<T>>(arg.abs_value),
4136+
arg.prefix, specs, detail::digit_grouping<char>("\3", ","));
41364137
}
41374138
};
41384139

Diff for: test/format-test.cc

+3
Original file line numberDiff line numberDiff line change
@@ -1837,6 +1837,9 @@ TEST(format_test, bytes) {
18371837
TEST(format_test, group_digits_view) {
18381838
EXPECT_EQ(fmt::format("{}", fmt::group_digits(10000000)), "10,000,000");
18391839
EXPECT_EQ(fmt::format("{:8}", fmt::group_digits(1000)), " 1,000");
1840+
EXPECT_EQ(fmt::format("{}", fmt::group_digits(-10000000)), "-10,000,000");
1841+
EXPECT_EQ(fmt::format("{:8}", fmt::group_digits(-1000)), " -1,000");
1842+
EXPECT_EQ(fmt::format("{:8}", fmt::group_digits(-100)), " -100");
18401843
}
18411844

18421845
#ifdef __cpp_generic_lambdas

0 commit comments

Comments
 (0)