Following snippet outputs “No”. Any ideas why? Can anyone replicate the problem.
number = 12345678901
if isinstance(number, int):
print("Yes")
else:
print("No")
Following snippet outputs “No”. Any ideas why? Can anyone replicate the problem.
number = 12345678901
if isinstance(number, int):
print("Yes")
else:
print("No")
You can also check this way:
def is_int(val):
if type(val) == int:
return "Yes"
else:
if val.is_integer():
return "Yes"
else:
return "No"
Try this:
number = 12345678901
if isinstance(number, (int, long)):
print("Yes")
else:
print("No")
This is about precision of the integer types in Ironpython. In your example, number is defined as an instance of type long
(long integer) because it exceeds the system 32-bit precision limit. More info about this here. You can see this with by print type(number)
. A way to check for either integer types (int and long) would be simply
number = 12345678901
if isinstance(number, (int,long)):
print("Yes")
else:
print("No")
Thank you Mostapha and David,
I wrongly assumed that all IronPython integers are implemented as long (as in Python).
I wrongly assumed that all IronPython integers are implemented as long (as in Python).
Hi,
A finickity point - It’s not just Ironpython : This was the case in CPython 2.7 as well. It was changed a decade ago with the move to Python 3
Make sure you don’t mix C long
with Python long
. Plain integers (int
) in Python are implemented with C long
, but are still called integers. Python long
has no limit (other than what fits in memory).