精确定义浮点字符串格式?

时间:2013-05-13 15:36:49

标签: python floating-point string-formatting

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

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

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

这可能与“一般惯例是空格式字符串(”“)产生的结果相同,就像你在值上调用了str()一样。”?事实上:

>>> str(1e10)
'10000000000.0'

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

那么,{:20}的这种行为是否恰好在文档中定义了?精确定义浮点数的str()的精确行为(str(1e11)是否有指数,而不是str(1e10) ...)?

PS:我的目标是格式化numbers with an uncertainty,以便输出非常接近浮点数给出的数量(指数的存在与否等)。但是,我很难找到确切的格式规则。

PPS:'{:20}'.format(1e10)给出的结果与字符串格式'{!s:20}'.format(1e10)不同,字符串格式为左侧(通常用于字符串),而不是向右。

1 个答案:

答案 0 :(得分:-1)

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

至于数字格式化的原因,OP说:“一般惯例是空格式字符串(”“)产生的结果与在值上调用str()的结果相同。”这就是你得到的,按照格式字符串进行空格填充(数字格式是空的,格式可以容纳完整的str表示。)