[format] Restrict fill characters for numerical values
Hi, I think http://www.python.org/dev/peps/pep-3101/ is too liberal with the choice of fill characters for numerical values. As far as I can see, this is quite legal: Python 2.7a0 (trunk:76132M, Nov 6 2009, 15:20:35) [GCC 4.1.3 20080623 (prerelease) (Ubuntu 4.1.2-23ubuntu3)] on linux2 Type "help", "copyright", "credits" or "license" for more information.
from decimal import * format(Decimal(4), "9<10") '4999999999' format(Decimal(4), "9>10") '9999999994' format(Decimal(4), "->2") '-4'
I propose to disallow digits and '+-' fill characters for numerical values, except for the combination '0, left-padding'. Actually, I'd prefer to allow only whitespace and '0, left-padding'. See also: http://bugs.python.org/issue6871 http://bugs.python.org/issue6902 Stefan Krah
Stefan Krah wrote:
Hi,
I think http://www.python.org/dev/peps/pep-3101/ is too liberal with the choice of fill characters for numerical values. As far as I can see, this is quite legal:
Python 2.7a0 (trunk:76132M, Nov 6 2009, 15:20:35) [GCC 4.1.3 20080623 (prerelease) (Ubuntu 4.1.2-23ubuntu3)] on linux2 Type "help", "copyright", "credits" or "license" for more information.
from decimal import * format(Decimal(4), "9<10") '4999999999' format(Decimal(4), "9>10") '9999999994' format(Decimal(4), "->2") '-4'
I propose to disallow digits and '+-' fill characters for numerical values, except for the combination '0, left-padding'. Actually, I'd prefer to allow only whitespace and '0, left-padding'.
Why? What problem are you trying to prevent that would justify the extra code to implement this and the extra documentation to explain it? Eric.
Eric Smith <eric@trueblade.com> wrote:
Stefan Krah wrote:
Hi,
I think http://www.python.org/dev/peps/pep-3101/ is too liberal with the choice of fill characters for numerical values. As far as I can see, this is quite legal:
Python 2.7a0 (trunk:76132M, Nov 6 2009, 15:20:35) [GCC 4.1.3 20080623 (prerelease) (Ubuntu 4.1.2-23ubuntu3)] on linux2 Type "help", "copyright", "credits" or "license" for more information.
from decimal import * format(Decimal(4), "9<10") '4999999999' format(Decimal(4), "9>10") '9999999994' format(Decimal(4), "->2") '-4'
I propose to disallow digits and '+-' fill characters for numerical values, except for the combination '0, left-padding'. Actually, I'd prefer to allow only whitespace and '0, left-padding'.
Why?
What problem are you trying to prevent that would justify the extra code to implement this and the extra documentation to explain it?
I simply think that apart from rounding, the output of format should not change the numerical value of its argument. The format functions in C do not allow this to happen. Are there other languages where this is possible? Stefan Krah
Stefan Krah <stefan-usenet@bytereef.org> wrote:
I simply think that apart from rounding, the output of format should not change the numerical value of its argument. The format functions in C do not allow this to happen. Are there other languages where this is possible?
Actually there are other cases: strfmon() allows this, too. Let's drop it. Stefan Krah
Stefan Krah wrote:
Eric Smith <eric@trueblade.com> wrote:
Stefan Krah wrote:
Hi,
I think http://www.python.org/dev/peps/pep-3101/ is too liberal with the choice of fill characters for numerical values. As far as I can see, this is quite legal:
Python 2.7a0 (trunk:76132M, Nov 6 2009, 15:20:35) [GCC 4.1.3 20080623 (prerelease) (Ubuntu 4.1.2-23ubuntu3)] on linux2 Type "help", "copyright", "credits" or "license" for more information.
from decimal import * format(Decimal(4), "9<10") '4999999999' format(Decimal(4), "9>10") '9999999994' format(Decimal(4), "->2") '-4'
I propose to disallow digits and '+-' fill characters for numerical values, except for the combination '0, left-padding'. Actually, I'd prefer to allow only whitespace and '0, left-padding'. Why?
What problem are you trying to prevent that would justify the extra code to implement this and the extra documentation to explain it?
I simply think that apart from rounding, the output of format should not change the numerical value of its argument. The format functions in C do not allow this to happen. Are there other languages where this is possible?
I don't know if there are other languages that allow it. But I definitely have use cases for padding with '*', for example. I don't see the point in just disallowing numbers 1 through 9. If you don't want your numbers padded with 9's, don't put a 9 in your format string. Eric.
participants (2)
-
Eric Smith -
Stefan Krah