Sympy 检查数字是否自然

Sympy check if a number is natural

如果我是一些随机数,我如何检查它是否是一个整数 (∈ ℕ)?

>>> from sympy.core.numbers import Float
>>> Float(2)
2.00000000000000
>>> Float(2).is_integer
False # what ??

我找到了一个简单的解决方法,但我觉得这是一种破解方法:

>>> Float(2) % 1 == 0
True
>>> Float(2.5) % 1 == 0
False

那么有没有更正确的方法来判断一个数字是否是自然数?

这种查询出现在整个 SymPy 代码库中,我们对此的解决方案是在相关表达式上使用 as_int。当 strict 标志关闭时,相当于 int 的 float 将作为 int 返回。否则(或者如果表达式不是整数)将引发 ValueError:

>>> from sympy import Float
>>> from sympy.core.compatibility import as_int
>>> as_int(2.0)
Traceback (most recent call last):
... 
ValueError: 2.0 is not an integer

>>> as_int(2.0, strict=False)
2

在测试函数中使用它给出:

>>> def isint(i):
...     try: as_int(i, strict=False)
...     except: return False
...     return True
>>> isint(Float(2))
True