Измените мантиссу в экспоненциальной записи с 0-1 вместо 1-10

Я хочу отформатировать число так, чтобы мантисса находилась в диапазоне от 0 до 1, а не от 1 до 10 в экспоненциальной записи.

Например;

a=7.365
print("{:.6e}".format(a))

Это выведет 7.365000e+00, но я хочу, чтобы это было 0.736500e+01.

На самом деле, я подозреваю, что вы хотите, чтобы это было 0.736500e+01.

lastchance 05.07.2024 13:11

Надеюсь, вы знаете, что поддержка Python 2 прекращена несколько лет назад. Вероятно, вам следует игнорировать Python 2 и потратить свое время на рекомендуемую и поддерживаемую в настоящее время версию языка — Python 3.

tripleee 05.07.2024 13:12

Следует ли 1.000000e... включить или исключить?

Walter Tross 05.07.2024 13:15

Я понимаю «между 0 и 1 вместо 1 и 10» как [0,1) вместо [1,10).

Weijun Zhou 05.07.2024 13:18

@WalterTross Значение 1 будет 0.1e+01, поэтому 1 исключается

Raheel Shaikh 05.07.2024 13:19

@tripleee Я застрял на Python 2.7, так как работаю на устаревшей рабочей машине

Raheel Shaikh 05.07.2024 13:20
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
6
72
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я полагаю, вы всегда можете попробовать создать свою собственную предварительно отформатированную строку. (Однако понятия не имею, работает ли это в Python 2.7).

import math

def fixit( x, n ):
   if x == 0.0: return f" {x:.{n}e}"

   s = ' ' if x >= 0 else '-'
   y = math.log10( abs(x) )
   m = math.floor(y) + 1
   z = 10 ** ( y - m )
   return s + f"{z:.{n}f}e{m:+03d}"

for x in [ -7635, -763.5, -76.35, -7.635, -0.7635, -0.07635, -0.007635, 0.007635, 0.07635, 0.7635, 7.635, 76.35, 763.5, 7635 ]:
    print( fixit( x, 6 ) )
for x in [ -10, -1, -0.1, -0.01, 0.0, 0.01, 0.1, 1, 10 ]:
    print( fixit( x, 6 ) )

Выход:

-0.763500e+04
-0.763500e+03
-0.763500e+02
-0.763500e+01
-0.763500e+00
-0.763500e-01
-0.763500e-02
 0.763500e-02
 0.763500e-01
 0.763500e+00
 0.763500e+01
 0.763500e+02
 0.763500e+03
 0.763500e+04
-0.100000e+02
-0.100000e+01
-0.100000e+00
-0.100000e-01
 0.000000e+00
 0.100000e-01
 0.100000e+00
 0.100000e+01
 0.100000e+02

f-строки недоступны в Python 2.7, поэтому стиль f"..." не будет работать.

Matt Pitkin 05.07.2024 16:32

Ах хорошо. Возможно, будет проще просто вернуть мантиссу и показатель степени отдельно и позволить ОП записать их в поля f и d по своему усмотрению. Работа со знаками и простой случай x=0 раздражали больше.

lastchance 05.07.2024 16:37

Вы можете переключить if x == 0.0: return f" {x:.{n}e}" на if x == 0.0: return " {0:.{1}e}".format(x, n) и return s + f"{z:.{n}f}e{m:+03d}" на return s + "{0:.{1}f}e{2:+03d}".format(z, n,int(m)), и он будет совместим с Python 2.7.

Matt Pitkin 05.07.2024 16:52

Спасибо за комментарий, @Мэтт Питкин. Я программировал на Python недостаточно долго, чтобы когда-либо использовать Python 2.7. Сейчас нет особой мотивации делать это. Кроме того, я гораздо больше привык к Фортрану, где контролировать количество значащих цифр перед десятичной запятой можно прямо в операторе формата.

lastchance 05.07.2024 17:06

Элегантное решение, которое работает – спасибо @lastchance

Raheel Shaikh 05.07.2024 17:07

Вы можете сделать что-то вроде следующего:

import math

x = 0.07365

def zero_one_mant(x):
    """
    Return a string for the input number `x`, where the mantissa is always
    between 0 and 1 and the exponent is adjusted accordingly.
    """

    exp = int(math.floor(math.log10(x))) + 1
    
    mant = x / 10**exp
    
    return "{0:.6f}e{1:+03d}".format(mant, exp)
    

for x in [0.07365, 7.365, 73.65]:
    print(zero_one_mant(x))

0.736500e-01
0.736500e01
0.736500e02

Другие вопросы по теме