我想a四舍五入到13.95。
a
>>> a 13.949999999999999 >>> round(a, 2) 13.949999999999999
该round功能无法按我预期的方式工作。
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("{:.2f}".format(a)) 13.95 >>> print("{:.2f}".format(round(a, 2))) 13.95 >>> print("{:.15f}".format(round(a, 2))) 13.949999999999999
如果您只在小数点后两位(例如,显示货币价值),那么您有几个更好的选择: