在Python中以小数范围显示

4 投票
3 回答
6780 浏览
提问于 2025-04-17 07:47

我正在阅读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位。

1

这是一种叫做 字符串格式化字符串插值 的功能。你可以在 这里 找到它的相关文档。它的工作方式和 C 语言中的 printf 函数的格式字符串非常相似。

4

'%.03f' 这个格式中,前面的 0 是没什么用的。它和 '%.3f' 是一样的。

至于第二个问题,'%3f' 是干嘛的,它其实是指定整个数字的长度,就像 '%3s' 一样。如果你把这个长度设得更长,就更容易理解了:

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

撰写回答