Говорят, что ваш list
является List
объектов, не указанных. Это значит, что Java не знает, какие объекты находятся внутри списка. Затем, когда вы хотите итерировать список, вы должны использовать каждый элемент, чтобы иметь доступ к свойствам этого элемента (в данном случае, String).
В общем, это лучшая идея параметризации коллекции , поэтому у вас нет проблем с преобразованием, вы сможете добавлять элементы параметризованного типа, и ваш редактор предложит вам подходящие методы.
private static List<String> list = new ArrayList<String>();
Вышеупомянутые ответы работают во многих случаях, но они пропускают некоторые. Рассмотрим следующее:
fl = sum([0.1]*10) # this is 0.9999999999999999, but we want to say it IS an int
Используя это в качестве эталона, некоторые из других предложений не получают желаемого поведения:
fl.is_integer() # False
fl % 1 == 0 # False
Вместо этого попробуйте:
def isclose(a, b, rel_tol=1e-09, abs_tol=0.0):
return abs(a-b) <= max(rel_tol * max(abs(a), abs(b)), abs_tol)
def is_integer(fl):
return isclose(fl, round(fl))
теперь мы получаем:
is_integer(fl) # True
isclose
поставляется с Python 3.5 + , а для других Python вы можете использовать это в основном эквивалентное определение ( как указано в соответствующем PEP )
Вы можете использовать функцию round
для вычисления значения.
Да в python, как многие указали, когда мы вычисляем значение корня куба, он даст вам результат с небольшим количеством ошибок. Чтобы проверить, является ли это целое число, вы можете использовать следующую функцию:
def cube_integer(n):
if round(n**(1.0/3.0))**3 == n:
return True
return False
Но помните, что int(n)
эквивалентен math.floor
, и из-за этого, если вы найдете int(41063625**(1.0/3.0))
, вы получите 344 вместо 345.
Поэтому будьте осторожны при использовании int
с корнями куба.
Надежда I ответили на ваш вопрос. Если у вас есть другие запросы, вы можете связаться со мной .
Вам не нужно зацикливать или проверять что-либо. Просто возьмите кубический корень из 12 000 и закруглите его:
r = int(12000**(1/3.0))
print r*r*r # 10648
Не было бы легче проверить корни куба? Начните с 20 (20 ** 3 = 8000) и до 30 (30 ** 3 = 27000). Затем вам нужно проверить менее 10 целых чисел.
for i in range(20, 30):
print("Trying {0}".format(i))
if i ** 3 > 12000:
print("Maximum integral cube root less than 12000: {0}".format(i - 1))
break
n**(1/3)
является целым числом. Например, на моем компьютере `10648 ** (1/3) = 21.999999999999996` вместо 22
: проблема! При таком методе ответа такой проблемы нет. Я думаю, что это единственное правильное решение с математической точки зрения (другие решения Python-correct).
– JPG
5 February 2014 в 19:16
Для этого вы можете использовать операцию modulo .
if (n ** (1.0/3)) % 1 != 0:
print("We have a decimal number here!")
n
равно 6.2, 6.0, 6.12312412, все мы имеем "We have a decimal number here!"
?
– Jay Wong
4 February 2016 в 12:02
Вы можете использовать это:
if k == int(k):
print(str(k) + "is a whole number!"
.is_integer()
продолжает работать.
– jfs
19 October 2014 в 12:49
is_integer
использует аналогичный метод (o = (floor(x) == x) ? Py_True : Py_False;
). Но я согласен, следует использовать is_integer()
, поскольку он намного яснее.
– Juri Robl
19 October 2014 в 12:57
large_float == large_int
может выйти из строя, даже если large_float == float(large_int)
.
– jfs
19 October 2014 в 13:11
123456789012345678901234567890.0 != 123456789012345678901234567890
, но 123456789012345678901234567890.0 == float(123456789012345678901234567890)
– jfs
19 October 2014 в 13:33
k = 123456789012345678901234567890.0
, тогда k == int(k)
имеет значение True, что является правильным ответом.
– Juri Robl
19 October 2014 в 13:35
Мы можем использовать оператор modulo (%). Это говорит нам, сколько остатков мы имеем, когда мы делим x на y - выражается как x % y
. Каждое целое число должно делиться на 1, поэтому, если есть остаток, оно не должно быть целым числом.
Эта функция вернет логические значения, True
или False
, в зависимости от того, является ли n
целым числом.
def is_whole(n):
if n % 1 == 0:
return True
else:
return False
return n % 1 == 0
, чтобы сохранить некоторые строки.
– antorqs
20 October 2017 в 09:05
Попробуйте использовать:
int(val) == val
Это даст намного больше точности, чем любые другие методы.
Только часть информации, is_integer
делает внутренне:
import math
isInteger = (math.floor(x) == x)
Не совсем в python, но реализация cpython реализована, как указано выше.
blockquote >
True
, если вообще нет десятичных знаков. Разумеется, может быть недоразумение со стороны ОП относительно арифметики с плавающей запятой и точности. – Martijn Pieters♦ 5 February 2014 в 19:171.0000000000000001
отображается как1.0
. – Martijn Pieters♦ 5 February 2014 в 19:21math.fsum([0.1] * 10) == 1
– A-B-B 24 June 2016 в 04:371.1
не является целым числом, поскольку десятичная часть не равна 0. – Martijn Pieters♦ 7 November 2016 в 23:24