2024-04-18 15:50:23 发布
网友
我希望a四舍五入到13.95。
a
>>> a 13.949999999999999 >>> round(a, 2) 13.949999999999999
^{}函数的工作方式与我预期的不同。
有新的格式规范,String Format Specification Mini-Language:
您可以执行以下操作:
"{0:.2f}".format(13.949999999999999)
注意上面返回一个字符串。为了获得浮点数,只需使用float(...)包装:
float(...)
float("{0:.2f}".format(13.949999999999999))
注意用float()包装不会改变任何内容:
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
如果只在小数点后两位(例如显示货币值),则有两个更好的选择:
内置的round()在Python 2.7或更高版本中运行良好。
round()
示例:
>>> round(14.22222223, 2) 14.22
签出the documentation。
有新的格式规范,String Format Specification Mini-Language:
您可以执行以下操作:
注意上面返回一个字符串。为了获得浮点数,只需使用
float(...)
包装:注意用
float()
包装不会改变任何内容:您遇到的old problem中的浮点数并不是所有数字都能精确表示。命令行只是向您显示内存中的完整浮点形式。
对于浮点表示,舍入的版本是相同的数字。由于计算机是二进制的,它们将浮点数存储为整数,然后除以2的幂,因此13.95将以类似于1256504296036838/(2**53)的方式表示。
双精度数字有53位(16位)的精度,而常规浮点数有24位(8位)的精度。存储值的floating point type in Python uses double precision。
例如
如果只在小数点后两位(例如显示货币值),则有两个更好的选择:
内置的
round()
在Python 2.7或更高版本中运行良好。示例:
签出the documentation。
相关问题 更多 >
编程相关推荐