首页 > 解决方案 > 查看数字是否为小数的最佳方法

问题描述

我正在寻找区分像 2.0or这样的数字2和像2.4. 最好的方法是什么?目前我正在做:

def is_fractional(num):
    if not str(num).replace('.','').isdigit(): return
    return float(num) != int(num)

>>> is_fractional(2)
False
>>> is_fractional(2.1)
True
>>> is_fractional(2.0)
False
>>> is_fractional('a')
>>>

标签: python

解决方案


该操作是内置的:

>>> 5.0.is_integer()
True
>>> 5.00000001.is_integer()
False
>>> 4.9999999.is_integer()
False

文档在这里

附录

最初的解决方案仅适用于float. 这是一个更完整的答案,带有测试:

from decimal import Decimal

def is_integer(x):
    if isinstance(x, int):
        return True
    elif isinstance(x, float):
        return x.is_integer()
    elif isinstance(x, Decimal):
        return x.as_integer_ratio()[1] == 1
    return False

good = [
    0, 
    0.0, 
    3, 
    -9999999999999999999999, 
    -2.0000000000000,
    Decimal("3.000000"),
    Decimal("-9")
]
bad = [
    -9.99999999999999,
    "dogs",
    Decimal("-4.00000000000000000000000000000000001"),
    Decimal("0.99999999999999999999999999999999999")
]

for x in good:
    assert is_integer(x)
for x in bad:
    assert not is_integer(x)
print("All tests passed")

推荐阅读