python is.integer()出现故障[重复]

Posted

技术标签:

【中文标题】python is.integer()出现故障[重复]【英文标题】:python is.integer() malfunctioning [duplicate] 【发布时间】:2015-10-21 08:24:39 【问题描述】:

我正在做一个测试,计算最小 n 使得对于 1/a + 1/b = 1/n,至少有 x 个不同的解决方案。 (a, b, n, x 为正整数)

我检查了 b = 1/(1/n - 1/a) 并用is.integer() 测试了 b,结果让我感到惊讶。

x = 2
n = 1
while(1):
    x0 = 0
    for a in range(n+1,2*n + 1):
        print '-------------'
        print 'a='.format(a)
        b = 1.0 / (1.0/n - 1.0/a)
        print 'b='.format(b)
        print 'b is integer: ' + str(b.is_integer())
        if b.is_integer():
            print 'a= b= n='.format(a,b,n)
            x0 += 1
        if x0 * 2 - 1 >= x:
            print n
            exit(0)
    n += 1

输出,那么为什么 b = 6.0 和 12.0 不是整数?

-------------
a=2
b=2.0
b is integer: True
a=2 b=2.0 n=1
-------------
a=3
b=6.0
b is integer: False
-------------
a=4
b=4.0
b is integer: True
a=4 b=4.0 n=2
-------------
a=4
b=12.0
b is integer: False
-------------
a=5
b=7.5
b is integer: False
-------------
a=6
b=6.0
b is integer: True
a=6 b=6.0 n=3
...

【问题讨论】:

【参考方案1】:

在 Python2 中,str 不是数字的忠实表示,它旨在用于“用户友好的输出”。因此非常接近 6 的数字输出为 6.0。如果您想查看正确的输出,请使用 .format 中的 repr 或 !r 说明符。

'b = !r'.format(b)

或者只使用 Python 3。:-)

【讨论】:

谢谢,这很鼓舞人心。 是的,尤其是“只使用 Py3”位。 :-D【参考方案2】:

如果你尝试这样的事情

    print 'b is integer: ' + str(b.is_integer()), repr(b)

您会看到,由于浮点数学中的近似值,这些值非常接近但不完全是整数

【讨论】:

谢谢!没有意识到这一点。

以上是关于python is.integer()出现故障[重复]的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法在python中保存变量值如果树莓派电源出现故障?

解Bug之路-dubbo应用无法重连zookeeper

Oracle已有数据表建立表分区—在线重定义

R的基础函数

电脑开机出现windows未能启动

kvm常见故障及解决