我不明白为什么,通过格式化包含浮点值的字符串,不会遵守最后一个字符串的精度。即:
'%f' % 38.2551994324
返回:
'38.255199'
(失去了4个标志!)
目前我解决了指定:
'%.10f' % 38.2551994324
按预期返回'38 .2551994324'但是我应该手动强制我想要多少个十进制数?有没有办法简单告诉python保留所有这些?! (如果我不知道我的号码有多少小数,我该怎么办?)
答案 0 :(得分:18)
但是我应该手动强制我想要多少个十进制数?是。
即使指定了10个十进制数字,您仍然无法打印所有这些数字。浮点数无论如何都没有这种精度,它们大多是近似的十进制数(它们实际上是二进制分数加起来的)。试试这个:
>>> format(38.2551994324, '.32f')
'38.25519943239999776096738060005009'
还有更多的小数,你甚至没有指定。
格式化浮点数时(使用'%f' % number
,'{:f}'.format(number)
或format(number, 'f')
),会显示默认小数位数。这与使用str()
(或'%s' % number
,'{}'.format(number)
或format(number)
(基本上在引擎盖下使用str()
)时只有小数位数没有什么不同默认包括在内;使用str()
时,3.2之前的Python版本使用12位作为整数。
如果您希望有理数计算使用特定的,精确的位数,则不要使用浮点数。改为使用decimal.Decimal
type:
十进制“基于一个浮点模型,它是为人们设计的,并且必然具有最重要的指导原则 - 计算机必须提供与人们学习的算法相同的算法学校。“ - 摘自十进制算术规范。
十进制数字可以准确表示。相比之下,像
1.1
和2.2
这样的数字在二进制浮点中没有精确的表示。最终用户通常不希望1.1 + 2.2
显示为3.3000000000000003
,因为它与二进制浮点显示。
答案 1 :(得分:3)