>>>>> Dennis Lee Bieber <[EMAIL PROTECTED]> (DLB) wrote:
>DLB> On Fri, 07 Mar 2008 23:12:27 +0100, Piet van Oostrum <[EMAIL PROTECTED]> >DLB> declaimed the following in comp.lang.python: >>> Sorry to come in so late in this discussion. Although it is correct to say >>> that many real numbers that have an exact decimal representation cannot be >>> exactly represented in binary, that is no excuse to print 53.6 as >>> 53.600000000000001. This is just lousy printing and the fact that this kind >>> of question comes up every week shows that it is confusing to many people. >>> >>>>> 53.6 >DLB> 53.600000000000001 >>>>> print 53.6 >DLB> 53.6 >>>>> print str(53.6) >DLB> 53.6 >>>>> print repr(53.6) >DLB> 53.600000000000001 >>>>> >DLB> Looks like "print" already does what you expect. No, what you see is not the behaviour of `print' but of `str'. `print' uses `str' to do the formatting instead of `repr' whereas the interactive prompt uses `str'. `str' is meant to please the human reader, and `repr' is supposed to give you something that you can use as input and get exactly the same value. But `str' does it by just giving you less accuracy, thus sweeping the problem under the carpet: >>> str(53.59999999999) 53.6 >>> 53.59999999999==53.6 False >>> repr(53.59999999999) '53.599999999989997' >>> 53.599999999989997==53.59999999999 True >>> repr(53.6) '53.600000000000001' >>> 53.600000000000001==53.6 True -- Piet van Oostrum <[EMAIL PROTECTED]> URL: http://pietvanoostrum.com [PGP 8DAE142BE17999C4] Private email: [EMAIL PROTECTED] -- http://mail.python.org/mailman/listinfo/python-list