python - 格式化复数

对于我的一个类(class)中的一个项目,我们必须输出最多五位小数的数字。输出可能是一个复数,我无法弄清楚如何输出一个小数点后五位的复数.对于花车,我知道它只是:

打印 "%0.5f"%variable_name

复数有类似的东西吗?

最佳答案

您可以使用 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)'

更新 - 更简单的方式

虽然您不能使用 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() 方法将其用于复数。这没有明确记录,但 Format Specification Mini-Language 暗示了这一点。文档只是说:

'f'  Fixed point. Displays the number as a fixed-point number. The default precision is 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-strings

Formatted string literals (又名 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

在 Python 3.8.0 中,支持 = 说明符 was added到 f-strings,允许你写:

print(f'{n1=:.2f}')  # -> n1=3.40+2.30j
print(f'{n2=:.3f}')  # -> n2=3.400-2.300j

https://stackoverflow.com/questions/7746143/

相关文章:

c# - C++ 格式化,如 Visual Studio C# 格式化

android - 在用户语言环境中显示日期和时间

vim - 在 Vim 中对齐行尾注释?

formatting - CNContactFormatter 需要哪些键?

r - 通过符号在ggplot2中设置特定的填充颜色

text - LaTeX - 更改文档的字体大小,但在序言中,而不是文档类?

c++ - 将 double 指数的可移植打印到 C++ iostreams

formatting - 不显示文化的本国货币时的正确货币格式

php - 使用 PHPExcel 以文本格式读取数字

java - 为什么 DecimalFormat 允许字符作为后缀?