Как управлять точным форматом научной нотации в строке формата Python?

#python #scientific-notation

#python #научная нотация

Вопрос:

Под моим вопросом я подразумеваю, что у меня есть несколько чисел в диапазоне от 0.6e9 до 3.6e9 . Я уже использую f"foo {number:.1E} bar" для достижения научного форматирования при печати / отображении f-строк, однако возникает проблема, которая 0.6e9 «сокращается» до 6.0e8 , что не то, что я хочу.

Я понимаю, что технически это правильный ответ, но для целей отображения и удобства чтения я считаю, что было бы лучше использовать его как 0.6e9 , чтобы соответствовать другим.

Чтобы было понятно, чего я хочу, это контролировать мощность 10, используемую в научном форматировании.
Это то, чем можно легко управлять, или для этого потребуется пользовательская функция?

Комментарии:

1. Где именно? Отметки, метку, некоторую строку формата вы передаете в matplotlib? Пожалуйста, приведите минимальный пример того, где вы хотите, чтобы это произошло, предпочтительно, если это график, график с некоторыми числами в качестве короткого примера.

2. Пожалуйста, приложите некоторый код, чтобы можно было найти лучшее решение, связанное с вашей программой.

3. @kabanus где угодно. Форматирование выполняется стандартной нотацией форматирования Python независимо от того, где она будет использоваться. Даже простая print() строка. (например, введите print(f"{10000:.1e}") в консоль python.) В моем конкретном случае я использовал это в label аргументе pyplot графика, но это всего лишь f-строка.

4. Я внес изменения в ваш вопрос, чтобы прояснить это — упоминание matplotlib является отвлекающим маневром, поскольку у него есть собственный набор форматирования.

Ответ №1:

Поскольку вы упомянули, что это всего лишь f-строка, в вашем конкретном примере, где диапазон ограничен, этого может быть достаточно для получения соответствующей строки формата:

 f'{number/1e9:.1f}e9'
  

Комментарии:

1. Умно! Я настроил его в соответствии со своими потребностями в метке matplotlib plot label, поскольку fr"{number/1e9:.1f}$times 10^9$" это дает мне именно то, на что я надеялся, спасибо!

2. @ch4rl 1e97 С тексом еще лучше!