diff options
| author | Mark Dickinson <dickinsm@gmail.com> | 2010-08-01 10:41:49 +0000 | 
|---|---|---|
| committer | Mark Dickinson <dickinsm@gmail.com> | 2010-08-01 10:41:49 +0000 | 
| commit | 5b65df7ce200fd4320fe5db1a307ee438de7a5ee (patch) | |
| tree | 5c1e679831cf9052232040d6252955b2458fd85d /Objects/stringlib/formatter.h | |
| parent | 8708e385979ca6978da681ff6a27888facc41ba4 (diff) | |
| download | cpython-git-5b65df7ce200fd4320fe5db1a307ee438de7a5ee.tar.gz | |
Issue #9416: Fix some issues with complex formatting where the
output with no type specifier failed to match the str output:
  - format(complex(-0.0, 2.0), '-') omitted the real part from the output,
  - format(complex(0.0, 2.0), '-') included a sign and parentheses.
Diffstat (limited to 'Objects/stringlib/formatter.h')
| -rw-r--r-- | Objects/stringlib/formatter.h | 12 | 
1 files changed, 8 insertions, 4 deletions
diff --git a/Objects/stringlib/formatter.h b/Objects/stringlib/formatter.h index ba2a251c2f..ab57a82288 100644 --- a/Objects/stringlib/formatter.h +++ b/Objects/stringlib/formatter.h @@ -1136,9 +1136,10 @@ format_complex_internal(PyObject *value,          /* Omitted type specifier. Should be like str(self). */          type = 'g';          default_precision = PyFloat_STR_PRECISION; -        add_parens = 1; -        if (re == 0.0) +        if (re == 0.0 && copysign(1.0, re) == 1.0)              skip_re = 1; +        else +            add_parens = 1;      }      if (type == 'n') @@ -1223,8 +1224,11 @@ format_complex_internal(PyObject *value,                                      n_re_digits, n_re_remainder,                                      re_has_decimal, &locale, &tmp_format); -    /* Same formatting, but always include a sign. */ -    tmp_format.sign = '+'; +    /* Same formatting, but always include a sign, unless the real part is +     * going to be omitted, in which case we use whatever sign convention was +     * requested by the original format. */ +    if (!skip_re) +        tmp_format.sign = '+';      n_im_total = calc_number_widths(&im_spec, 0, im_sign_char, p_im,                                      n_im_digits, n_im_remainder,                                      im_has_decimal, &locale, &tmp_format);  | 
