Fix %S formatting for chrono durations with leading zeroes (#3814)
This commit is contained in:
@@ -1151,18 +1151,23 @@ void write_fractional_seconds(OutputIt& out, Duration d, int precision = -1) {
|
||||
out = std::fill_n(out, leading_zeroes, '0');
|
||||
out = format_decimal<Char>(out, n, num_digits).end;
|
||||
}
|
||||
} else {
|
||||
} else if (precision > 0) {
|
||||
*out++ = '.';
|
||||
leading_zeroes = (std::min)(leading_zeroes, precision);
|
||||
out = std::fill_n(out, leading_zeroes, '0');
|
||||
int remaining = precision - leading_zeroes;
|
||||
if (remaining != 0 && remaining < num_digits) {
|
||||
n /= to_unsigned(detail::pow10(to_unsigned(num_digits - remaining)));
|
||||
out = format_decimal<Char>(out, n, remaining).end;
|
||||
out = std::fill_n(out, leading_zeroes, '0');
|
||||
if (remaining < num_digits) {
|
||||
int num_truncated_digits = num_digits - remaining;
|
||||
n /= to_unsigned(detail::pow10(to_unsigned(num_truncated_digits)));
|
||||
if (n) {
|
||||
out = format_decimal<Char>(out, n, remaining).end;
|
||||
}
|
||||
return;
|
||||
}
|
||||
out = format_decimal<Char>(out, n, num_digits).end;
|
||||
remaining -= num_digits;
|
||||
if (n) {
|
||||
out = format_decimal<Char>(out, n, num_digits).end;
|
||||
remaining -= num_digits;
|
||||
}
|
||||
out = std::fill_n(out, remaining, '0');
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user