3

Python 的文档(Python 2.7)中是否定义了以下行为?

>>> '{:20}'.format(1e10)                                                        
'       10000000000.0'
>>> '{:20g}'.format(1e10)
'               1e+10'

事实上,第一个结果让我吃惊:文档表明不为浮点数指明格式类型('f'、'e' 等)等同于使用通用格式 'g'。这个例子表明情况似乎并非如此,所以我很困惑。

也许这与“一般约定是空格式字符串 ("") 产生的结果与您在值上调用 str() 时产生的结果相同。”这一事实有关?实际上:

>>> str(1e10)
'10000000000.0'

但是,在格式的情况下{:20},格式字符串不是空的(它是20),所以我很困惑。

那么,这种行为是否{:20}在文档中精确定义?str()浮点数的精确行为是否精确定义(str(1e11)有指数,但没有str(1e10)……)?

PS:我的目标是格式化具有不确定性的数字,以便输出非常接近浮点数给出的结果(是否存在指数等)。但是,我很难找到确切的格式规则。

PPS:'{:20}'.format(1e10)给出的结果与字符串格式不同'{!s:20}'.format(1e10),其中字符串向左刷新(与字符串一样)而不是向右。

4

1 回答 1

-1

正如@blckknght 在评论中解释的那样,'{:20}'指定字符串宽度为 20;要指定浮点精度,您需要在它之前添加一个小数点:{:.20}{:.20g}.

至于为什么要按原样格式化数字,OP 说:“一般约定是空格式字符串 ("") 产生的结果与您在值上调用 str() 时产生的结果相同。” 这就是您所得到的,根据格式字符串填充空格(对于数字格式,它是空的,并且格式可以容纳完整的str表示形式)。

于 2013-09-09T17:30:06.497 回答