isl*_*per 17 python formatting complex-numbers number-formatting
对于我的一个类中的项目,我们必须输出最多五位小数.输出可能是一个复数,我无法弄清楚如何输出一个带有五位小数的复数.对于花车我知道它只是:
print "%0.5f"%variable_name
复杂的数字有类似的东西吗?
mar*_*eau 25
您可以使用以下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)'
Run Code Online (Sandbox Code Playgroud)
为了使它正确处理正和虚部分,你需要一个(甚至更复杂的)复杂的格式化操作:
>>> 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)'
Run Code Online (Sandbox Code Playgroud)
更新 - 更轻松的方式
虽然您不能使用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))
Run Code Online (Sandbox Code Playgroud)
输出:
TypeError: float argument required, not complex
Run Code Online (Sandbox Code Playgroud)
但是,您可以通过该str.format()方法使用复数.这没有明确记录,但是格式规范迷你语言文档暗示:
'f'固定点.将数字显示为定点数.默认精度为6.
..所以很容易被忽视.具体而言,以下适用于Python 2.7.14和3.4.6:
print('n1: {:.2f}'.format(n1))
print('n2: {:.2f}'.format(n2))
Run Code Online (Sandbox Code Playgroud)
输出:
n1: 3.10+4.20j
n2: 3.10-4.20j
Run Code Online (Sandbox Code Playgroud)
这并不能完全控制我原来答案中的代码,但它确实更简洁(并自动处理正负虚部分).
字符串格式化操作(即模 ( %) 运算符)和较新的str.format() 格式化字符串语法都不支持复杂类型。然而,可以__format__直接调用所有内置数字类型的方法。这是一个例子:
>>> i = -3 # int
>>> l = -33L # long (only Python 2.X)
>>> f = -10./3 # float
>>> c = - 1./9 - 2.j/9 # complex
>>> [ x.__format__('.3f') for x in (i, l, f, c)]
['-3.000', '-33.000', '-3.333', '-0.111-0.222j']
Run Code Online (Sandbox Code Playgroud)
请注意,这也适用于负虚部。
| 归档时间: |
|
| 查看次数: |
23191 次 |
| 最近记录: |