斗士狗 2009-01-18 18:16 采纳率: 50%
浏览 395

限制为两个小数点

I want a to be rounded to 13.95.

>>> a
13.949999999999999
>>> round(a, 2)
13.949999999999999

The round function does not work the way I expected.

转载于:https://stackoverflow.com/questions/455612/limiting-floats-to-two-decimal-points

  • 写回答

19条回答 默认 最新

  • larry*wei 2009-01-18 18:23
    关注

    You are running into the old problem with floating point numbers that all numbers cannot be represented. The command line is just showing you the full floating point form from memory.

    In floating point your rounded version is the same number. Since computers are binary, they store floating point numbers as an integer and then divide it by a power of two so 13.95 will be represented in a similar fashion to 125650429603636838/(2**53).

    Double precision numbers have 53 bits (16 digits) of precision and regular floats have 24 bits (8 digits) of precision. The floating point in Python uses double precision to store the values.

    For example,

      >>> 125650429603636838/(2**53)
      13.949999999999999
    
      >>> 234042163/(2**24)
      13.949999988079071
    
      >>> a=13.946
      >>> print(a)
      13.946
      >>> print("%.2f" % a)
      13.95
      >>> round(a,2)
      13.949999999999999
      >>> print("%.2f" % round(a,2))
      13.95
      >>> print("{0:.2f}".format(a))
      13.95
      >>> print("{0:.2f}".format(round(a,2)))
      13.95
      >>> print("{0:.15f}".format(round(a,2)))
      13.949999999999999
    

    If you are after only two decimal places as in currency then you have a couple of better choices: 1) Use integers and store values in cents, not dollars and then divide by 100 to convert to dollars. 2) Or use a fixed point number like decimal.

    评论

报告相同问题?