如何检查laaaaaaaarge编号以查看是否为整数?

时间:2018-12-23 10:41:46

标签: python python-3.x int

检查数字是浮点数还是整数都不是问题。

以下是一些简单的方法:

a = 4

b = 4.123
  1. res = float(a).is_integer()
    

    返回TrueFalse

  2. if type(a) == int:
        print("a ist an integer")
    
  3. if a - int(a) == 0:
        print('Integer')
    else:
        print('No Integer')
    

但是当我有一个大号的Nummer时,它将不再起作用:

a = 31231242354234534534534534534534534534534534535434645755453543543453534534534534534535345346756423423

b = 31231242354234534534534534534534534534534534535434645755453543543453534534534534534535345346756423423.111

我想检查非常多的数字来解决数学问题。


编辑: 我应该提到,这些数字也应该被识别为整数:

5.243
6.0
312423423534534564564567457546756756856856745634523423423423423.0

我的计算结果是浮点数。我想检查结果是否为整数。

对于大量数字,常规方法不起作用。

7 个答案:

答案 0 :(得分:2)

这对于示例中显示的数量级数是不可能的,并且通常实际上是不可能的,因为最终浮点数的精度变得太粗糙而无法将整数与浮点数区分开。例如:

>>> 100000000000000000000000.5 == \ 
... 100000000000000000000000.0                                                                                                                                        
False
>>> 1000000000000000000000000.5 == \ 
... 1000000000000000000000000.0                                                                                                                                       
True

两个输入都解析为相同的数字。如果要区分它们,则需要在对数字进行评估之前进入并访问原始来源(文本)。

答案 1 :(得分:0)

仅检查类型可能会产生误导。如果您要解决一个数学问题,即您的函数溢出了连续的数字范围,并且要检查哪个整数,那么type(a)可能对您不起作用。

解决方案:改用is_integer

a = 31231242354234534534534534534534534534534534535434645755453543543453534534534534534535345346756423423.0
print('Type: ',type(a))
print('Is integer: ',a.is_integer()) 

第一张支票给您float,而另一张支票告诉您数字是整数。

答案 2 :(得分:0)

您可以使用 isinstance 。这是示例:

a = 100
print(isinstance(a, int))

它将打印 True False 值,具体取决于 a 变量(在这种情况下为 True )的值类型以上)。

print(isinstance(a, float))

在上面的示例中,它将显示 False

答案 3 :(得分:0)

length = (int) (math.log10(a) + 1);仅返回整数的长度。

在这里尝试: https://onlinegdb.com/Sk1jmeTxV

import math
a= 31231242354234534534534534534534534534534534535434645755453543543453534534534534534535345346756423423

b = 31231242354234534534534534534534534534534534535434645755453543543453534534534534534535345346756423423.111

length = (int) (math.log10(a) + 1);

if length ==len(str(abs(a))): 
   print ('is a perfect int');

答案 4 :(得分:0)

就像从输入或文件中获取数字一样,您可以使用小数模块:

    import decimal

    ctx=decimal.Context(prec=200)

    b=decimal.Decimal("31231242354234534534534534534534534534534534535434645755453543543453534534534534534535345346756423423.111")                                                                                                            

    print( ctx.divmod(b,1) ) 
    Out: Decimal('31231242354234534534534534534534534534534534535434645755453543543453534534534534534535345346756423423'), Decimal('0.111'))

    print(ctx.divmod(b,1)[1].is_zero())    # integer?                                                                               
    Out: False

答案 5 :(得分:0)

我要检查数字“ x”的立方根是否为整数。

根计算的结果是浮点数。

例如,应检查以下数字“ y”:

x = 12341254534XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
y = x**(1/3)  # y = cube root of x

y = 6456535XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.2146544753325
or
y = 6456535XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.0
or 
y = 6456535XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.99999999999646546547

这不适用于这些大数字。

答案 6 :(得分:-1)

为什么不使用正则表达式?