将所有数字四舍五入到sympy对象中

时间:2019-05-23 17:06:41

标签: python sympy

我有一个类'sympy.core.add.Add'对象,我想将该对象中的所有数字四舍五入到2位数字。

给出:

2.96652814643838 * sin(x)+ 3.11758737898895 * sin(2 * x)

所需:

2.97 * sin(x)+ 3.12 * sin(2 * x)

有什么想法怎么做?

1 个答案:

答案 0 :(得分:1)

尽管nfloat会将所有数字转换为所需的有效数字,但是无法在表达式中全局舍入数字。但是expr.xreplace(Transform(lambda x: x.round(2), lambda x: isinstance(x, Float)))可以工作。

>>> expr = 2.96652814643838*sin(x) + 3.11758737898895*sin(2*x)
>>> from sympy.core.rules import Transform
>>> expr.xreplace(Transform(lambda x: x.round(2), lambda x: isinstance(x, Float)))
2.97*sin(x) + 3.12*sin(2*x)