Fixed digits after decimal with f-strings
对于python f-strings(pep 498),是否有一种简单的方法来固定小数点后的位数?(特别是F字符串,而不是其他字符串格式选项,如.format或%)
例如,假设我想在小数点后显示两位数字。
我该怎么做?
1 2 3 4 5 6 7 8 9 10 11 12 | a = 10.1234 f'{a:.2}' Out[2]: '1e+01' f'{a:.4}' Out[3]: '10.12' a = 100.1234 f'{a:.4}' Out[5]: '100.1' |
如您所见,"精度"的含义已从"小数点后的位数"更改为"总位数",就像使用%格式时的情况一样。无论我有多大的一个数字,我怎么总是能在小数点后得到2位数呢?
在格式表达式中包含类型说明符:
1 2 3 | >>> a = 10.1234 >>> f'{a:.2f}' '10.12' |
当涉及到
1 | f'{value:{width}.{precision}}' |
号
在哪里?
value 是任何计算为数字的表达式。width 指定用于显示的字符总数,但如果value 需要的空间大于宽度指定的空间,则使用额外的空间。precision 表示小数点后使用的字符数。
您缺少的是十进制值的类型说明符。在这个链接中,您可以找到浮点和小数的可用表示类型。
这里有一些示例,使用EDOCX1(固定点)表示类型:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | # notice that it adds spaces to reach the number of characters specified by width In [1]: f'{1 + 3 * 1.5:10.3f}' Out[1]: ' 5.500' # notice that it uses more characters than the ones specified in width In [2]: f'{3000 + 3 ** (1 / 2):2.1f}' Out[2]: '3001.7' In [3]: f'{1.2345 + 4 ** (1 / 2):9.6f}' Out[3]: ' 3.234500' # omitting width but providing precision will use the required characters to display the number with the the specified decimal places In [4]: f'{1.2345 + 3 * 2:.3f}' Out[4]: '7.234' # not specifying the format will display the number with as many digits as Python calculates In [5]: f'{1.2345 + 3 * 0.5}' Out[5]: '2.7344999999999997' |
加上罗布?S回答:如果你想打印相当大的数字,使用千位分隔符是一个很大的帮助(注意逗号)。
1 2 | >>> f'{a*1000:,.2f}' '10,123.40' |
。