Как проверить число laaaaaaaarge, чтобы увидеть, является ли оно целым числом? - PullRequest
0 голосов
/ 23 декабря 2018

Нетрудно проверить, является ли число числом с плавающей запятой или целым числом.

Вот несколько простых способов:

a = 4

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

    возвращает True или False

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

Но когда у меня большое число, этобольше не работает:

a = 31231242354234534534534534534534534534534534535434645755453543543453534534534534534535345346756423423

b = 31231242354234534534534534534534534534534534535434645755453543543453534534534534534535345346756423423.111

Я хотел бы проверить очень много и очень большие числа для решения математической задачи.


РЕДАКТИРОВАТЬ: я должен упомянутьчто такие числа также должны распознаваться как целые числа:

5.243
6.0
312423423534534564564567457546756756856856745634523423423423423.0

Результатом моих вычислений являются числа с плавающей точкой.Я хочу проверить, является ли результат целым числом.

Для больших чисел обычные методы не работают.

Ответы [ 7 ]

0 голосов
/ 23 декабря 2018

Почему бы не использовать регулярные выражения?

0 голосов
/ 23 декабря 2018

Я хочу проверить, является ли корень куба числа "x" целым числом.

Результатом вычисления корня является число с плавающей запятой.

Например,следующие цифры "y" должны быть проверены:

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

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

Это не работает для этих больших чисел.

0 голосов
/ 23 декабря 2018

Скорее всего, вы получите число в виде строки из ввода или файла, и вы можете использовать десятичный модуль:

    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
0 голосов
/ 23 декабря 2018

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');
0 голосов
/ 23 декабря 2018

Вы можете использовать isinstance .Вот пример:

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

Он напечатает True или False значения зависят от типа значения для a переменной ( True в данном случае выше).

print(isinstance(a, float))

В приведенном выше примере будет напечатано False

0 голосов
/ 23 декабря 2018

Это невозможно с числами величины, показанными в вашем примере, и, действительно, вообще невозможно, потому что со временем точность с плавающей запятой становится слишком грубой, чтобы отличить целое число от числа с плавающей запятой.Например:

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

Оба входа были проанализированы на одинаковые номера.Если вы хотите различить их, вам нужно будет войти до того, как числа будут оценены, и получить доступ к исходному источнику (тексту).

0 голосов
/ 23 декабря 2018

Простая проверка типа может вводить в заблуждение.Если вы пытаетесь решить математическую задачу, в которой ваша функция отображает непрерывный диапазон чисел, и вы хотите проверить, какие целые числа, то type(a) скорее всего не подойдет вам.

Решение: используйте is_integer вместо этого.

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

Первая проверка дает вам float, а другая говорит, что число целое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...