преобразование числа в научную нотацию python с переменной

#python #string #variables #jupyter-notebook #format

#python #строка #переменные #jupyter-записная книжка #формат

Вопрос:

Я хочу использовать str.format для преобразования числа 2 в научную нотацию, возведенную в ту же экспоненциальную, но экспоненциальную необходимо отключить str.format . Пример:

 from math import log10
y=10000
x=round(np.log10(y))
m=10
y="{:e}".format(y)
m="{:e}".format(m)
print(y)
print(m)
 

здесь у меня есть, что m имеет e = 1, а y e = 4, и я хочу, чтобы у обоих было одинаковое «e». я хочу установить оба значения в экспоненциальный x.

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

1. @samcarter_is_at_topanswers.xyz о, чувак, действительно спасибо xD Я поставил вопрос на свой пост, но если ты хочешь поставить себя, я дам тебе право

2. Хорошо, чувак, спасибо тебе большое

Ответ №1:

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

 def format_exp(x, n):
    significand = x / 10 ** n
    exp_sign = ' ' if n >= 0 else '-'
    return f'{significand:f}e{exp_sign}{n:02d}'
 

Объяснение:

  • x это число для форматирования и n мощность, которую вы хотите отобразить;
  • significand вычисляет часть, которая будет отображаться перед e символом, путем деления x на 10 n ( 10 ** n );
  • exp_sign является либо или - , в зависимости от значения n (для репликации поведения по умолчанию).

Пример использования:

 >>> import math
>>> y = 10000
>>> m = 10
>>> x = math.floor(math.log10(y))  # x = 4
>>> print(format_exp(y, x))
1.000000e 04
>>> print(format_exp(m, x))
0.001000e 04
>>> print(format_exp(y, 1))
1000.000000e 01
>>> print(format_exp(m, 1))
1.000000e 01
 

Вы можете увеличить сложность этой функции, добавив дополнительный параметр d для установки количества десятичных знаков, напечатанных в значимой части (со значением по умолчанию 6 , чтобы воспроизвести поведение Python по умолчанию):

 def format_exp(x, n, d=6):
    significand = x / 10 ** n
    exp_sign = ' ' if n >= 0 else '-'
    return f'{significand:.{d}f}e{exp_sign}{n:02d}'
 

С помощью этой функции вы можете управлять количеством напечатанных десятичных знаков:

 >>> print(format_exp(y, x))  # default behaviour still works
1.000000e 04
>>> print(format_exp(y, x, 4))
1.0000e 04
>>> print(format_exp(y, x, 1))
1.0e 04
 

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

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

2. @MiguelGodinho В разделе синтаксиса строки формата документации Python не упоминается о какой-либо возможности выбора показателя степени с помощью встроенной format функции; единственными цифрами, которые вы можете ввести, являются width (общая ширина форматированной строки, заполненная пробелами или любым другим желаемым символом) и precision (количество цифр после десятичной точки).

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

4. @MiguelGodinho Что вы подразумеваете под изменением точности? Функция format_exp может быть расширена с помощью некоторой дополнительной математики, если вы хотите указать количество значащих цифр вместо количества напечатанных десятичных знаков.

5. Я хотел сказать другое, но nvm. Я не могу найти другого ответа, собираюсь дать ваш, верно.