将浮点限制为两个小数点

2024-04-18 15:50:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望a四舍五入到13.95

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

^{}函数的工作方式与我预期的不同。


Tags: 函数方式round
3条回答

有新的格式规范,String Format Specification 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

您遇到的old problem中的浮点数并不是所有数字都能精确表示。命令行只是向您显示内存中的完整浮点形式。

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

双精度数字有53位(16位)的精度,而常规浮点数有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("{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. 或者使用固定点编号,如decimal

内置的round()在Python 2.7或更高版本中运行良好。

示例:

>>> round(14.22222223, 2)
14.22

签出the documentation

相关问题 更多 >