Python 文档 (Python 2.7) 中是否定义了以下行为?
>>> '{:20}'.format(1e10)
' 10000000000.0'
>>> '{:20g}'.format(1e10)
' 1e+10'
事实上,第一个结果让我感到惊讶:documentation指示不指示 float 的格式类型(“f”、“e”等)等同于使用通用格式“g”。这个例子表明情况似乎并非如此,所以我很困惑。
也许这与以下事实有关:“一般惯例是空格式字符串 ("") 产生的结果与您对值调用 str() 时产生的结果相同。”?事实上:
>>> str(1e10)
'10000000000.0'
但是,在 {:20}
格式的情况下,格式字符串不为空(它是 20
),所以我很困惑。
那么,{:20}
的这种行为是否在文档中有准确定义? str()
在 float 上的精确行为是否被精确定义(str(1e11)
有一个指数,但 str(1e10)
没有……) ?
PS:我的目标是格式化numbers with an uncertainty这样输出就非常接近 float 的输出(指数的存在与否等)。但是,我很难找到确切的格式设置规则。
PPS:'{:20}'.format(1e10)
给出的结果不同于字符串格式 '{!s:20}'.format(1e10)
,其中字符串被刷新到左侧(通常用于字符串)而不是右侧。
最佳答案
正如@blckknght 在评论中解释的那样,'{:20}'
指定字符串宽度为 20;要指定浮点精度,您需要在它前面加一个小数点:{:.20}
或 {:.20g}
。
至于为什么数字按原样格式化,OP 说:“一般惯例是空格式字符串 ("") 产生的结果与您在值上调用 str() 产生的结果相同。"这就是你得到的,按照格式字符串进行空格填充(数字格式是空的,格式可以容纳完整的 str
表示)。
关于python - 浮点字符串格式的精确定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16525924/