但是我真的应该手动强制要多少个十进制数字吗? 是。
即使指定了10个十进制数字,您仍然不能全部打印。无论如何,浮点数没有这种精度,它们大多是十进制数的 近似值
(它们实际上是加起来的二进制分数)。尝试这个:
>>> format(38.2551994324, '.32f')'38.25519943239999776096738060005009'
还有 很多 甚至没有指定的小数。
当格式化浮点数(无论是与
'%f' % number,
'{:f}'.format(number)或format(number, 'f')),一个
默认的 显示小数位数。这与使用
str()(或
'%s' %number,
'{}'.format(number)或format(number),实际上是
str()在幕后使用)时没有什么不同,只有默认情况下包含的小数位数有所不同;Python版本之前3.2使用12位
的整数 使用时
str()。
如果您希望有理数计算可以使用 特定的精确
数字位数,则不要使用浮点数。使用
decimal.Decimal类型代替:
十进制“基于浮点模型,该浮点模型是为人而设计的,并且必然具有最重要的指导原则–计算机必须提供一种与人们在学校学习的算法相同的算法。”
–摘自十进制算术规范。小数可以精确表示。相比之下,类似
1.1和的数字2.2在二进制浮点数中没有确切的表示形式。最终用户通常不会期望1.1 +2.2像3.3000000000000003二进制浮点那样显示。



