防止 f 字符串将浮点数转换为科学记数法

mrz*_*rzo 7 python floating-point f-string

我对 python 3.7.2 中 f-strings 的这种默认行为感到震惊:

>> number = 0.0000001
>> string = f"Number: {number}"
>> print(string)
Number: 1e-07
Run Code Online (Sandbox Code Playgroud)

我的预期是: Number: 0.0000001

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

基本上与这个问题相反。

编辑:我想避免为浮动通过设置固定长度,{number:.8f}因为我的数字有不同的长度,我不想有任何尾随零。我想使用 f-strings 自动生成文件名,如下所示:

filename = f"number_{number:.10f}_other_number_{other_number:.10f}.json"
Run Code Online (Sandbox Code Playgroud)

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

Tin*_*yen 7

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'
Run Code Online (Sandbox Code Playgroud)

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

  • 选择一个大数字并在“str”实例上添加“.rstrip('0')”。如果您的数字恰好是“3.00000”,请添加“.rstrip('0').rstrip('.')”,这样您的字符串最终就不会是“3.”。 (2认同)

mrz*_*rzo 1

检查其他来源后,我发现numpy.format_float_positional在这里工作得非常好:

import numpy as np
number = 0.0000001
string = f"Number: {np.format_float_positional(number)}"
Run Code Online (Sandbox Code Playgroud)