如何严格将浮点数转换为整数而不进行舍入?

时间:2019-07-18 05:17:11

标签: python python-3.x

我希望找到一种方法来实现以下目标:对于5.0的赞,返回5。对于不能等于任何整数的5.1赞,返回Error。

当前,我将int()与“ if integer!= float”一起使用。但这有问题,例如,我将无法判断出不平等是由5.1还是1111111111111111.0(甚至更大的数字)引起的。

与潜在的,简单的单行命令相比,这也非常麻烦。那么在Python中是否有执行此操作的命令?

5 个答案:

答案 0 :(得分:10)

Python中的浮点对象有一个is_integer()谓词。

def strict_int(x):
    if x.is_integer():
        return int(x)
    raise ValueError

请注意,int个对象不是具有此谓词。如果尝试在int上调用此属性,则会出现属性错误。


如果您想使用一些错误值而不是异常,则可以使用这种单线格式

int(x) if x.is_integer() else 'Error'

答案 1 :(得分:2)

按照answer@Anthony V的建议使用math,如下所示:

>>> frac, whole = math.modf(5.0) 
>>> if frac ==0.0:
...     print("this is a whole") 
... else: 
...     print("this is not whole and should return the Error") 

这应该很容易工作。

答案 2 :(得分:1)

我不确定是否有更惯用的方法来执行此操作,但是直觉上,您可以比较intfloat的值,并在它们相等时返回。 / p>

那是

def weird_cast(my_float):
    if int(my_float) == my_float:
        return int(my_float)
    return None # or some error

答案 3 :(得分:0)

def return_int(a):
    if int(a)==a:
        print(int(a)) #you can store the integer value in separate variable #also b = int(a)
        #instead of using print you can use return b or int(a)   
    else:
        print('Error') #or you can use return 'Error'

a = 5.0
return_int(a)

答案 4 :(得分:0)

也许另一种更简单的方法是减去舍入后的数字本身。 如果余数大于0.0且小于1.0,则可以将其称为浮点数,否则为整数

def IntegerSanityCheck ( num ):
    remainder = abs ( round ( num ) - num )
    if ( remainder > 0.0 ) and ( remainder < 1.0 ):
        print "Float"
    else:
        print "Integer"

或者您可以按照user2906838的建议使用math