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