Есть несколько способов сделать это. Вы могли бы nsimplify(expr, rational=True)
, но это изменит 3.1 на 31/10, и тогда вам придется отменить это. Использование replace
не заменяет вещь, которая проверяется как равная. Так что единственное известное мне решение - это пользовательская функция:
>>> def intify(expr):
... floats = S(expr).atoms(Float)
... ints = [i for i in floats if int(i) == i]
... return expr.xreplace(dict(zip(ints, [int(i) for i in ints])))
...
>>> intify(2.0*x+3.1)
2*x + 3.1