Python 对sympy对象中的所有数字进行四舍五入

Python 对sympy对象中的所有数字进行四舍五入,python,sympy,Python,Sympy,我有一个类“sympy.core.add.add”对象,我想将该对象中的所有数字四舍五入到2位 给定: 2.96652814643838*sin(x)+3.11758737895*sin(2*x) 所需: 2.97*sin(x)+3.12*sin(2*x) 有什么办法吗?尽管nfloat会将所有数字转换为所需的有效数字,但无法对表达式中的数字进行全局四舍五入。但是expr.xreplace(转换(lambda x:x.round(2),lambda x:isinstance(x,Float))可

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

给定:

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

所需:

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


有什么办法吗?

尽管
nfloat
会将所有数字转换为所需的有效数字,但无法对表达式中的数字进行全局四舍五入。但是
expr.xreplace(转换(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)

舍入到指定的小数位数在网上和前面的问题中都有很好的记录。转换是一种比提取原子、构建替换字典然后执行xreplace更好的方法。