Предотвращение преобразования строки в научную запись c - PullRequest
2 голосов
/ 26 февраля 2020

Меня поразило поведение по умолчанию f-строк в python 3.7.2:

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

То, что я ожидал, было: Number: 0.0000001

Это особенно раздражает для создания имен файлов. Как отключить автоматическое преобразование c в нотацию scientifi c? И почему он включен в первую очередь?

В основном противоположность этого вопроса .

Редактировать: Я хотел бы избежать установки фиксированная длина для числа с плавающей точкой через {number:.8f}, так как мои числа имеют разную длину, и я не хочу иметь конечные нули. Я хочу использовать f-строки для автоматического создания имен файлов, например:

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

Я ищу простой модификатор, который может отключить автоматическое обозначение c scientifi c при сохранении исходной точности поплавка.

Ответы [ 2 ]

5 голосов
/ 26 февраля 2020

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

0 голосов
/ 09 марта 2020

numpy .format_float_positional очень хорошо работает здесь:

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