2

当数字没有小数时,我尝试将浮点数转换为整数。

我做这个

from math import modf

def float_like_int(n):
    if abs(modf(n)[0]) < 1e-6:
        return int(n)
return n

print float_like_int(10.1)
print float_like_int(10.00001)
print float_like_int(10.000001)
print float_like_int(10.0)

存在标准功能或更通用的方式?(没有 1e-6)

4

4 回答 4

3

我认为以下内容比您的版本更具可读性:

def float_like_int(n):
    if round(n, 6) == round(n):
        return int(round(n))
    return n

请注意,这确实与您的函数的含义略有不同,因为它也会像9.9999999to一样四舍五入10

于 2013-10-23T17:29:48.643 回答
3

如果小数部分小于 1e-6 (0.000001 ),您正在使用的那些方法会尝试生成一个整数。这意味着如果您有一个数字 4.000001(实际上是浮点数),您的函数将丢弃小数部分。您可以将 1e-6 更改为另一个值,并且符合您条件的数字将转换为int

这是我的代码,没有导入任何额外的模块。此代码不会丢弃任何小数部分。

def Func(a):
    if (a * 10) % 10 == 0:
        return int(a)
    else:
        return a
f = 4.03
print Func(23.45)
print Func(f)
print Func(2.3)
于 2013-10-23T17:53:34.337 回答
1

也许这样的事情更自然?

def float_like_int(n):
    if int(n) == float(n):
        return int(n)
    else:
        return float(n)
于 2013-10-23T17:28:03.230 回答
0

您可以使用此功能:

def isWhole(x):
    if(x%1 == 0):
        return True
    else:
        return False
于 2013-10-23T17:37:29.183 回答