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

标签 python floating-point string-formatting

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/

相关文章:

math - 四舍五入到最接近的浮点整数

比较两个字典列表中值的 Pythonic 方法

Python SSL 错误 : VERSION_TOO_LOW

Python - 捕获文本中特定字符串后的下一个单词

c++ - 在没有 FPU 的情况下 float 会怎样?

lua - 如果 lua number 是 double,=/<=/>= 操作总是正确的吗?

python - 为什么使用列表作为字符串格式化参数,即使没有 %s 标识符,也会返回原始字符串?

php - 如何从 xml 馈送的字符串值中转义撇号 (')

python - 使用精确匹配正则表达式时格式化 Python 中的原始字符串

python - 如何检查所有元素是否属于一组?