gpt4 book ai didi

python - 将 float 限制为两位小数

转载 作者:bug小助手 更新时间:2023-10-28 01:28:21 25 4
gpt4 key购买 nike

我希望 a 舍入到 13.95。我尝试使用 round ,但我得到:

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

有关标准库 Decimal 类的类似问题,请参阅 How can I format a decimal to always show 2 decimal places? .

最佳答案

你遇到了old problem使用 float ,并非所有数字都可以精确表示。命令行只是从内存中向您显示完整的浮点形式。

使用浮点表示,您的四舍五入版本是相同的数字。由于计算机是二进制的,它们将 float 存储为整数,然后除以 2 的幂,因此 13.95 的表示方式类似于 125650429603636838/(2**53)。

double 的精度为 53 位(16 位),而普通 float 的精度为 24 位(8 位)。 floating point type in Python uses double precision存储值。

例如,

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

如果您只在小数点后两位(例如,显示货币值(value)),那么您有几个更好的选择:

  1. 使用整数并以美分而不是美元存储值,然后除以 100 以转换为美元。
  2. 或使用固定点数,如 decimal .

关于python - 将 float 限制为两位小数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/455612/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com