限制浮点数到两个小数点

我想要a四舍五入到13.95。

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

round函数不能按我预期的方式工作。


您正在用浮点数来解决所有数字都无法表示的旧问题。 命令行仅显示内存中的完整浮点格式。 在浮点数中,您的舍入版本是相同的数字。 由于计算机是二进制的,它们将浮点数存储为整数,然后将其除以2的幂,因此13.95将以与125650429603636838 /(2 ** 53)类似的方式表示。 双精度数的精度为53位(16位),常规浮点数的精度为24位(8位)。 python中的浮点使用双精度来存储值。

例如

  >>> 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

如果你的货币只有两位小数,那么你有两个更好的选择,使用整数和商店价值以美分而不是美元,然后除以100来转换为美元。 或者使用像十进制这样的定点数字


有新的格式规格, 字符串格式规范Mini-Language

你可以这样做:

"{0:.2f}".format(13.949999999999999)

请注意 ,上述内容返回一个字符串。 为了获得浮动,只需用float(...)

float("{0:.2f}".format(13.949999999999999))

请注意 ,使用float()封装不会改变任何内容:

>>> x = 13.949999999999999999
>>> x
13.95
>>> g = float("{0:.2f}".format(x))
>>> g
13.95
>>> x == g
True
>>> h = round(x, 2)
>>> h
13.95
>>> x == h
True

内置的round()在Python 2.7+中运行得很好 。 例:

>>> round(14.22222223, 2)
14.22

查看文档。

链接地址: http://www.djcxy.com/p/3633.html

上一篇: Limiting floats to two decimal points

下一篇: How to round a number to n decimal places in Java