#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. Я не могу найти другого ответа, собираюсь дать ваш, верно.