2011-12-06 59 views
4

我正在阅读wrox Beginning Python一书。在第2章中,示例状态为在python中显示小数范围内

>>> print "$.03f" & 30.0
$30.001 

但是,这并不能解释命令的行为。当.3和.003等在shell中具有相同的行为时,为什么要使用.03?此外,它不能解释时,我只是用3

>>> print "%.03f" % (2.34567891) 
2.346 
>>> print "%.003f" % (2.34567891) 
2.346 
>>> print "%.0003f" % (2.34567891) 
2.346 
>>> print "%.3f" % (2.34567891) 
2.346 
>>> print "%3f" % (2.34567891) 
2.345679 

我试图寻找,但不可能得到的结果,因为我不知道相关的关键字是什么什么happends。

+3

的''%经营者被淘汰,慢慢来。我开始使用'format':'print'{:.4}'。format(2.34567891)'。 – Blender

回答

4

0 in '%.03f'什么都不做。这相当于'%.3f'

至于第二个问题,'%3f'做什么,它只是指定整个数字的长度,就像在'%3s'中那样。

>>> '%10f' % 2.3 
' 2.300000' 
>>> len(_) 
10 
>>> 
+0

'%f'的默认值是6。 – Kjuly

1

这是被称为字符串格式化串内插的特征。其文档可以找到here。它的作用非常类似于C函数printf的格式字符串。

+2

我不认为他问这么多的字符串插值是什么,为什么它被'.03'和'.3'格式化,它产生相同的输出。 –

1

我不认为“%.3f”,“%.03f”和“%0.003f”有什么区别当中,数小数点后:如果你把它再变得清晰点由printf-family处理为数字,所以3 == 03 == 003.但是,“%.0f”将截断小数位数。另外,“%.f”与“%f”不同。

但是,“03”表示不printf的家庭无用的,它在你的榜样垫在号码前面零如果必要的话要打印,

>>> print "%5d" % (123) 
    123 
>>> print "%05d" % (123) 
0
>>> print "%5d" % (123456) 
123456 

“%3F”不一样作为“%5d”在我的东西。它打印一个至少三个数字的字符串。所以,如果在格式字符串中省略小数点

>>> print "%3f" % (2.34567891) 
2.345679 
>>> print "%3.f" % (2.34567891) 
    2 
>>> print "%3.1f" % (2.34567891) 
2.3 
>>> print "%3.2f" % (2.34567891) 
2.35 
>>> print "%3.3f" % (2.34567891) 
2.346 
>>> print "%30f" % (2.34567891) 
         2.345679 
>>> print "%30.8f" % (2.34567891) 
        2.34567891 
>>> print "%30.9f" % (2.34567891) 
        2.345678910 

不要忘了,默认的小数位为6

相关问题