Dick Moores wrote: > Yesterday I was shocked, SHOCKED, to discover that round() is > occasionally rounding incorrectly. For example, > > >>> print round(0.19945,4) > 0.1994 > > For rounding of random samples of numbers between 0 and 1 ending in > '45', the error ratio is about 0.041. Here are a few more examples:
As I said yesterday, these are numbers that don't have an exact representation as binary floating point numbers. The actual representation is slightly less than what you ask for and it is rounded correctly. The repr() function will show a decimal approximation of the actual binary number: In [1]: repr(.19945) Out[1]: '0.19944999999999999' For example 0.19945 is actually stored as approximately 0.19944999999999999. What should be the result of round(0.19944999999999999, 4) This is an inherent limitation of binary floating point, not a bug. If you want exact representation of decimal fractions use the decimal module. Read more here: http://docs.python.org/tut/node16.html > Comments, Tutors? Am I way out in left field with this? IMO yes. Kent _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor