【问题标题】:Displaying floats using F-string使用 F 字符串显示浮点数
【发布时间】:2021-04-13 18:21:06
【问题描述】:

我真的很好奇为什么将这个“f”添加到我要显示的数字的末尾时行为如此不同:

# CASE with f
float1 = 10.1444786

print(f"{float1:.4f}")
# print out: 10.1445

# CASE without f
print(f"{float1:.4}")
# print out: 10.14

为什么第二个例子只显示2个字符?

【问题讨论】:

  • @MauriceMeyer 那么请解释截断为 4 个字符如何产生 5 个字符的输出 :)
  • 请注意,这与 f-strings 无关,例如print("{:.4f}".format(float1))print("{:.4}".format(float1))

标签: python floating-point f-string


【解决方案1】:

隐含的类型说明符是g,如documentation 中所给出的感谢@Barmar 添加带有此信息的comment

无:对于float,这与“g”相同,除了当使用定点表示法格式化结果时,它始终包含至少一位小数点后的数字。使用的精度与忠实表示给定值所需的一样大。

对于Decimal,这与“g”或“G”相同,具体取决于当前十进制上下文的 context.capitals 值。

总体效果是匹配 str() 的输出,因为其他格式修饰符已更改。

一个实验:

for _ in range(10000):
    r = random.random() * random.randint(1, 10)
    assert f"{r:.6}" == f"{r:.6g}"

每次都有效

来自https://docs.python.org/3/library/string.html#formatstrings

一般格式。对于给定的精度 p >= 1,这会将数字四舍五入为 p 个有效数字,然后根据其大小将结果格式化为定点格式或科学计数法。精度 0 被视为等同于精度 1。

因此,在第二个示例中,您要求 4 个 sigfig,但在第一个示例中,您要求 4 位精度。

【讨论】:

  • 这在documentation 中有说明:无:对于浮点数,这与“g”相同,除了当使用定点表示法格式化结果时,它总是包括至少小数点后一位。
猜你喜欢
  • 2023-03-05
  • 1970-01-01
  • 1970-01-01
  • 2022-01-20
  • 2019-11-29
  • 2012-12-19
  • 2019-08-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多