@@ -1151,18 +1151,23 @@ void write_fractional_seconds(OutputIt& out, Duration d, int precision = -1) {
1151
1151
out = std::fill_n (out, leading_zeroes, ' 0' );
1152
1152
out = format_decimal<Char>(out, n, num_digits).end ;
1153
1153
}
1154
- } else {
1154
+ } else if (precision > 0 ) {
1155
1155
*out++ = ' .' ;
1156
1156
leading_zeroes = (std::min)(leading_zeroes, precision);
1157
- out = std::fill_n (out, leading_zeroes, ' 0' );
1158
1157
int remaining = precision - leading_zeroes;
1159
- if (remaining != 0 && remaining < num_digits) {
1160
- n /= to_unsigned (detail::pow10 (to_unsigned (num_digits - remaining)));
1161
- out = format_decimal<Char>(out, n, remaining).end ;
1158
+ out = std::fill_n (out, leading_zeroes, ' 0' );
1159
+ if (remaining < num_digits) {
1160
+ int num_truncated_digits = num_digits - remaining;
1161
+ n /= to_unsigned (detail::pow10 (to_unsigned (num_truncated_digits)));
1162
+ if (n) {
1163
+ out = format_decimal<Char>(out, n, remaining).end ;
1164
+ }
1162
1165
return ;
1163
1166
}
1164
- out = format_decimal<Char>(out, n, num_digits).end ;
1165
- remaining -= num_digits;
1167
+ if (n) {
1168
+ out = format_decimal<Char>(out, n, num_digits).end ;
1169
+ remaining -= num_digits;
1170
+ }
1166
1171
out = std::fill_n (out, remaining, ' 0' );
1167
1172
}
1168
1173
}
0 commit comments