我是初学python程序员,我已经学习了print语句中的格式说明符。因此,%3f意味着浮点数的宽度应为3。 但是,在下面的代码中,输出不是那样的
import math
print "%3f"%(math.pi)
此代码应输出3.1,因为我们将宽度指定为3。 但输出是3.141593。 我的问题:
1.指定仅宽度是否适用于整数而不适用于浮点数? 2.格式化浮点数时是否必须指定宽度和精度?
答案 0 :(得分:3)
仅指定宽度也适用于浮点数。问题是宽度也包括小数点。例如,做:
"%10f" % math.pi # ' 3.141593'
如您所见,字符串长度为10个字符。这里要考虑的另一件事是默认情况下,python将输出6个小数点,所以做"%3f"与"%3.6f"相同。
>>> "%3f" % math.pi
'3.141593'
>>> "%3.6f" % math.pi
'3.141593'
>>>
这就是为什么你没有得到预期的输出'3.1'
。为了实现这一目标,并了解之前的概念,您应该指定:
"%3.1f" % math.pi
或者只是:
"%.1f" % math.pi
答案 1 :(得分:1)
我只需指定小数点后面的部分:
>>> print "%.1f"%(math.pi)
3.1
答案 2 :(得分:1)
您还应该尝试更好的.format
方法。格式化时,它提供了更多的清晰度和功能。这将做你需要的,
'{:.1f}'.format(math.pi)
如果需要,您也可以轻松指定填充宽度,
'{:6.1f}'.format(math.pi)
您可以在此处阅读更多内容https://pyformat.info/
答案 3 :(得分:1)
%30.1%f
>>> print "%30.1f" % x
99999.5
中的第一个指定了字符串/
>>> print "%.1f" % x
99999.5
看看这个!
decimal
看到最后一个?它完善了它。如果您不想完善,请使用import math
from decimal import *
getcontext().prec=6
value = Decimal('999.559987').quantize(Decimal('.01'), rounding=ROUND_DOWN)
print str(value)
print '%.2f' % 999.559987
代替浮动。
999.55
999.56
输出:
SELECT woh.*
FROM workorderhistory woh
join (select max(operationtime) as operationtime , workorderid
from workorderhistory
where operation = 'CLOSE' group by workorderid
) woh2
on woh.workorderid = woh2.workorderid
where woh.operationtime > woh2.operationtime
and operation = 'REQ_CONVER'
答案 4 :(得分:0)
%5.3f
这是两部分。一个是integer '5' part
,另一个是floating part '.3'
。整数部分在打印数字之前打印space
的数量。浮动部分指定浮点后打印的数量。并且有很多例子以前的答案。