Undocumented handling of thousands separator for floats and differences wrt Decimal
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 77.2k
- Forks
- 35.9k
- PR merge metrics
- PR metrics pending
Description
Bug report
Bug description:
In docs we have:
The ',' option signals the use of a comma for a thousands separator for floating-point presentation types and for integer presentation type 'd'. For other presentation types, this option is an error. For a locale aware separator, use the 'n' integer presentation type instead.
The '_' option signals the use of an underscore for a thousands separator for floating-point presentation types and for integer presentation type 'd'. For integer presentation types 'b', 'o', 'x', and 'X', underscores will be inserted every 4 digits. For other presentation types, specifying this option is an error.
But this doesn't specify how separators are inserted for customized alignment, consider:
>>> format(0.0, '>020_f')
'0000000000000.000000'
>>> format(0.0, '<020_f')
'0.000000000000000000'
>>> format(0.0, '=020_f')
'0_000_000_000.000000'
>>> format(0.0, '^020_f')
'0000000.000000000000'
Probably it's obvious, that separators might be inserted only in case of 0-padding and = alignment, though maybe this should be mentioned explicitly.
Note also that neither from above supported by Decimal/Fraction, e.g.:
>>> format(Decimal(0.0), '=020_f')
Traceback (most recent call last):
File "<python-input-13>", line 1, in <module>
format(Decimal(0.0), '=020_f')
~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^
ValueError: invalid format string
>>> format(Fraction(0.0), '=020_f')
' 0.000000'
>>> format(float(Fraction(0.0)), '=020_f')
'0_000_000_000.000000'
BTW, the rationale for Fraction's behavior (see https://github.com/python/cpython/pull/100161) is "no special-casing of the particular '0=' fill-character/alignment combination", which is rather weak, IMO.
Either this should be fixed (preferred) or documented.
CPython versions tested on:
CPython main branch
Operating systems tested on:
No response
Linked PRs
- gh-131030
- gh-131067
- gh-132155
- gh-136241
- gh-136242
- gh-136649
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by reading the format specification mini-language documentation and reproducing the float, Decimal, and Fraction examples in the issue. Review the linked PRs to understand the work already underway. Done means resolving the separator and alignment behavior consistently or documenting the observed rules.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- documentation
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 25/100