Вы можете сделать это, как показано ниже, используя метод str.format()
:
>>> n = 3.4+2.3j
>>> n
(3.4+2.3j)
>>> '({0.real:.2f} + {0.imag:.2f}i)'.format(n)
'(3.40 + 2.30i)'
>>> '({c.real:.2f} + {c.imag:.2f}i)'.format(c=n)
'(3.40 + 2.30i)'
Чтобы правильно обрабатывать как положительные, так и отрицательные мнимые части, вам потребуется (даже более) сложная операция форматирования:
>>> n = 3.4-2.3j
>>> n
(3.4-2.3j)
>>> '({0:.2f} {1} {2:.2f}i)'.format(n.real, '+-'[n.imag < 0], abs(n.imag))
'(3.40 - 2.30i)'
Обновление - Easy Way
Хотя вы не можете использовать f
в качестве типа представления для комплексных чисел, используя оператор форматирования строки %
:
n1 = 3.4+2.3j
n2 = 3.4-2.3j
try:
print('test: %.2f' % n1)
except Exception as exc:
print('{}: {}'.format(type(exc).__name__, exc))
Выход:
TypeError: float argument required, not complex
Вы можете , однако используйте его с комплексными числами с помощью метода str.format()
. Это явно не задокументировано, но подразумевается спецификацией формата Mini-Language , которая просто гласит:
'f'
Фиксированная точка. Отображает номер как число с фиксированной точкой. Точность по умолчанию 6
.
. , .так легко пропустить.
Конкретно, в Python 2.7.14 и 3.4.6 работает следующее:
print('n1: {:.2f}'.format(n1))
print('n2: {:.2f}'.format(n2))
Выход:
n1: 3.10+4.20j
n2: 3.10-4.20j
Это не дает вам достаточного контроля, который дает код в моем исходном ответе, но, безусловно, гораздо более кратко (и обрабатывает как положительные, так и отрицательные мнимые части автоматически).
Обновление 2 - f-строк
Отформатированные строковые литералы (он же f-strings ) добавлены в Python 3.6, что означает, что это также может быть сделано в этой версии или позже:
print(f'n1: {n1:.2f}') # -> n1: 3.40+2.30j
print(f'n2: {n2:.3f}') # -> n2: 3.400-2.300j