防止f字符串将float转换为科学计数法

时间:2020-02-26 09:17:48

标签: python floating-point f-string

我对python 3.7.2中f字符串的默认行为感到震惊:

>> number = 0.0000001
>> string = f"Number: {number}"
>> print(string)
Number: 1e-07

我期望的是:Number: 0.0000001

这非常烦人,特别是对于创建文件名。 如何禁用这种自动转换为科学计数法的功能?为什么首先要启用它?

与此question基本上相反。

编辑:我想避免通过{number:.8f}为浮点数设置固定长度,因为我的数字的长度不同,并且我不希望尾随零。我想使用f字符串自动创建文件名,例如:

filename = f"number_{number:.10f}_other_number_{other_number:.10f}.json"

我正在寻找一个简单的修饰符,该修饰符可以在保持浮点数原始精度的同时禁用自动科学计数法。

2 个答案:

答案 0 :(得分:5)

https://docs.python.org/3.4/library/string.html#format-specification-mini-language

>>> number = 0.0000001
>>> f"Number: {number}"
'Number: 1e-07'
>>> f"Number: {number:f}"
'Number: 0.000000'
>>> f"Number: {number:.10f}"
'Number: 0.0000001000'

默认情况下,:f的精度为6。您可以将其更改为例如10 :.10f

答案 1 :(得分:0)

numpy.format_float_positional在这里效果很好:

import numpy as np
number = 0.0000001
string = f"Number: {np.format_float_positional(number)}"