为什么str()会舍入浮点数?
|
传递带有许多小数的浮点数时,内置的Python str()函数输出一些奇怪的结果。这是发生了什么:
>>> str(19.9999999999999999)
>>> \'20.0\'
我期望得到:
>>> \'19.9999999999999999\'
有人知道为什么吗?也许解决方法?
谢谢!
没有找到相关结果
已邀请:
4 个回复
递劝臼类洪
模块:
臀博
,它可能会给您至少接近19.998的值,因为32位的精度足以估算该值,但是19.999999999999999之类的精度却无法以32位估算,因此四舍五入到最接近的可能值,这会发生变成20。
闲窍
包含18个十进制数字;它不能完全表示为
。
产生最接近的浮点值,恰好与
相同。
如果用“许多小数”表示“小数点后的许多数字”,请注意,当小数点前有许多小数位时,会出现相同的“怪异”结果:
如果要获得完整的6精度,请不要使用str(),而应使用repr():
更新有趣的是,经常将ѭ3处方为浮游症引起的惊讶的万灵药。这通常伴随着简单的示例,例如ѭ16。没有人停止指出“ 3”有其不足之处,例如。
的确,
的精度限制为53个二进制数位。默认情况下,
限制为精度的28个十进制数字。
您可以更改限制,但是它仍然是有限的精度。您仍然需要知道数字格式的特征才能有效地使用它,而不会产生“令人惊讶的”结果,并且通过较慢的操作获得了更高的精度(除非您使用第3方
模块)。
膛嵌墒缅欠