在sympy表达式中是否有四舍五入的方法?



你好,我正在使用sympy来解决一些方程,它给了我这样的输出。

{P1: 300000000000000, P2: 60.0000000000000}

1.40765765765766e-18*x**4 - 5.63063063063063e-15*x**3 + 1.40765765765766e-11*x**2 - 5.63063063063063e-9*x - 1.87687687687687688e -7

我需要它使用零小数点,如果数字已经是一个整数所以它变成了

{P1: 30, P2: 60}如果数字不是整数,它会四舍五入到两个小数点

1.4 e-18 * * * 4 - 5.63 e15汽油* x * * 3 + 1.4 e-11 * * * 2 - 5.63 e-9 * x - 1.87 e

我不知道sympi的细节,但是对于数字,如果你使用Python的浮点表示:

number = 3.128312563

if number.is_integer():
number = int(number)
else:
number = float(f"{number:.2e}")

将把数字四舍五入。具体如何在sympy中显示它们,您可以在这里阅读手册。

您可以创建一个替换字典来使用xreplace:

>>> d = Dict({P1: 30,0, P2: 60})
>>> eq = 1.40765765765766e-18*x**4
>>> ir = lambda e: {i: int(i) if int(i) == i else i.round(2)
...     for i in e.atoms(Float)}
>>> touch = lambda e: e.xreplace(ir(e))
>>> touch(d)
{P1: 30, P2: 60}
>>> touch(eq)
0.0

最新更新