限制浮点数到两个小数点
我想要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