在Python中以小数范围显示
我正在阅读Wrox出版的《Python入门》这本书。在第二章中,书里的例子提到:
>>> print "$.03f" & 30.00123
$30.001
不过,这并没有解释这个命令的行为。为什么要用.03,而.3和.003等在命令行中表现是一样的?此外,它也没有解释当我只用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
我试着搜索,但找不到结果,因为我不知道相关的关键词是什么。
3 个回答
1
我觉得"%.3f"、"%.03f"和"%0.003f"这三种写法没有什么区别,格式中的小数点后面的数字在printf系列函数中都是作为数字处理的,所以3、03和003是一样的。不过,"%.0f"会把小数部分去掉。而且,"%.f"和"%f"也是不一样的。
不过,"03"在printf系列中并不是没用的,如果需要的话,它会在数字前面加上零。
>>> print "%5d" % (123)
123
>>> print "%05d" % (123)
00123
>>> 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位。
4
在 '%.03f'
这个格式中,前面的 0
是没什么用的。它和 '%.3f'
是一样的。
至于第二个问题,'%3f'
是干嘛的,它其实是指定整个数字的长度,就像 '%3s'
一样。如果你把这个长度设得更长,就更容易理解了:
>>> '%10f' % 2.3
' 2.300000'
>>> len(_)
10
>>>