您遇到浮点数的旧问题,无法表示所有数字。命令行只显示内存中的完整浮点形式。
在浮点数中,您的圆形版本是相同的数字。由于计算机是二进制的,它们将浮点数存储为整数,然后将其除以 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
如果您只有两位小数,那么您有几个更好的选择:1)使用整数并以美分存储值,而不是美元,然后除以 100 转换为美元。 2)或使用十进制的固定点数。
有新的格式规范, 字符串格式规范迷你语言 :
您可以这样做:
"{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