Python: return float 1.0 as int 1 but float 1.5 as float 1.5How to check if a float value is a whole numberChecking if float is equivalent to an integer value in pythonCalling an external command in PythonWhat are metaclasses in Python?Finding the index of an item given a list containing it in PythonHow can I safely create a nested directory in Python?How do I check if a string is a number (float)?How do I parse a string to a float or int in Python?Does Python have a ternary conditional operator?Does Python have a string 'contains' substring method?Catch multiple exceptions in one line (except block)Why is “1000000000000000 in range(1000000000000001)” so fast in Python 3?

Why "Having chlorophyll without photosynthesis is actually very dangerous" and "like living with a bomb"?

Python: next in for loop

Why don't electron-positron collisions release infinite energy?

Service Entrance Breakers Rain Shield

What typically incentivizes a professor to change jobs to a lower ranking university?

Is it tax fraud for an individual to declare non-taxable revenue as taxable income? (US tax laws)

What do the dots in this tr command do: tr .............A-Z A-ZA-Z <<< "JVPQBOV" (with 13 dots)

Do I have a twin with permutated remainders?

Why Is Death Allowed In the Matrix?

Example of a continuous function that don't have a continuous extension

TGV timetables / schedules?

Smoothness of finite-dimensional functional calculus

Have astronauts in space suits ever taken selfies? If so, how?

Why was the small council so happy for Tyrion to become the Master of Coin?

How much RAM could one put in a typical 80386 setup?

Why did the Germans forbid the possession of pet pigeons in Rostov-on-Don in 1941?

Why do falling prices hurt debtors?

Dragon forelimb placement

Approximately how much travel time was saved by the opening of the Suez Canal in 1869?

Today is the Center

Fencing style for blades that can attack from a distance

To string or not to string

Why can't I see bouncing of a switch on an oscilloscope?

Problem of parity - Can we draw a closed path made up of 20 line segments...



Python: return float 1.0 as int 1 but float 1.5 as float 1.5


How to check if a float value is a whole numberChecking if float is equivalent to an integer value in pythonCalling an external command in PythonWhat are metaclasses in Python?Finding the index of an item given a list containing it in PythonHow can I safely create a nested directory in Python?How do I check if a string is a number (float)?How do I parse a string to a float or int in Python?Does Python have a ternary conditional operator?Does Python have a string 'contains' substring method?Catch multiple exceptions in one line (except block)Why is “1000000000000000 in range(1000000000000001)” so fast in Python 3?






.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty height:90px;width:728px;box-sizing:border-box;








24















In Python is there a way to turn 1.0 into a integer 1 while the same function ignores 1.5 and leaves it as a float?



Right now, int() will turn 1.0 into 1 but it will also round 1.5 down to 1, which is not what I want.










share|improve this question









New contributor




Raymond Shen is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.















  • 4





    one way could be to check the float using is_integer() if that passes, convert it to int?

    – DirtyBit
    2 days ago







  • 5





    Floats are approximations, 1.0 could actually be 1.00000000000001 or 0.999999999999.

    – Barmar
    2 days ago






  • 51





    Why would you want to do this, anyway?

    – Barmar
    2 days ago






  • 5





    Note that because of duck typing, this passage you want to achieve is probably out of place or useless, depending on context.

    – Federico S
    2 days ago






  • 11





    Please specify your exact requirements in words/rules rather than just with a single example!

    – Lightness Races in Orbit
    2 days ago

















24















In Python is there a way to turn 1.0 into a integer 1 while the same function ignores 1.5 and leaves it as a float?



Right now, int() will turn 1.0 into 1 but it will also round 1.5 down to 1, which is not what I want.










share|improve this question









New contributor




Raymond Shen is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.















  • 4





    one way could be to check the float using is_integer() if that passes, convert it to int?

    – DirtyBit
    2 days ago







  • 5





    Floats are approximations, 1.0 could actually be 1.00000000000001 or 0.999999999999.

    – Barmar
    2 days ago






  • 51





    Why would you want to do this, anyway?

    – Barmar
    2 days ago






  • 5





    Note that because of duck typing, this passage you want to achieve is probably out of place or useless, depending on context.

    – Federico S
    2 days ago






  • 11





    Please specify your exact requirements in words/rules rather than just with a single example!

    – Lightness Races in Orbit
    2 days ago













24












24








24


3






In Python is there a way to turn 1.0 into a integer 1 while the same function ignores 1.5 and leaves it as a float?



Right now, int() will turn 1.0 into 1 but it will also round 1.5 down to 1, which is not what I want.










share|improve this question









New contributor




Raymond Shen is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.












In Python is there a way to turn 1.0 into a integer 1 while the same function ignores 1.5 and leaves it as a float?



Right now, int() will turn 1.0 into 1 but it will also round 1.5 down to 1, which is not what I want.







python






share|improve this question









New contributor




Raymond Shen is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.











share|improve this question









New contributor




Raymond Shen is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









share|improve this question




share|improve this question








edited 2 days ago









DirtyBit

12.3k31943




12.3k31943






New contributor




Raymond Shen is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









asked 2 days ago









Raymond ShenRaymond Shen

14524




14524




New contributor




Raymond Shen is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.





New contributor





Raymond Shen is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.






Raymond Shen is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.







  • 4





    one way could be to check the float using is_integer() if that passes, convert it to int?

    – DirtyBit
    2 days ago







  • 5





    Floats are approximations, 1.0 could actually be 1.00000000000001 or 0.999999999999.

    – Barmar
    2 days ago






  • 51





    Why would you want to do this, anyway?

    – Barmar
    2 days ago






  • 5





    Note that because of duck typing, this passage you want to achieve is probably out of place or useless, depending on context.

    – Federico S
    2 days ago






  • 11





    Please specify your exact requirements in words/rules rather than just with a single example!

    – Lightness Races in Orbit
    2 days ago












  • 4





    one way could be to check the float using is_integer() if that passes, convert it to int?

    – DirtyBit
    2 days ago







  • 5





    Floats are approximations, 1.0 could actually be 1.00000000000001 or 0.999999999999.

    – Barmar
    2 days ago






  • 51





    Why would you want to do this, anyway?

    – Barmar
    2 days ago






  • 5





    Note that because of duck typing, this passage you want to achieve is probably out of place or useless, depending on context.

    – Federico S
    2 days ago






  • 11





    Please specify your exact requirements in words/rules rather than just with a single example!

    – Lightness Races in Orbit
    2 days ago







4




4





one way could be to check the float using is_integer() if that passes, convert it to int?

– DirtyBit
2 days ago






one way could be to check the float using is_integer() if that passes, convert it to int?

– DirtyBit
2 days ago





5




5





Floats are approximations, 1.0 could actually be 1.00000000000001 or 0.999999999999.

– Barmar
2 days ago





Floats are approximations, 1.0 could actually be 1.00000000000001 or 0.999999999999.

– Barmar
2 days ago




51




51





Why would you want to do this, anyway?

– Barmar
2 days ago





Why would you want to do this, anyway?

– Barmar
2 days ago




5




5





Note that because of duck typing, this passage you want to achieve is probably out of place or useless, depending on context.

– Federico S
2 days ago





Note that because of duck typing, this passage you want to achieve is probably out of place or useless, depending on context.

– Federico S
2 days ago




11




11





Please specify your exact requirements in words/rules rather than just with a single example!

– Lightness Races in Orbit
2 days ago





Please specify your exact requirements in words/rules rather than just with a single example!

– Lightness Races in Orbit
2 days ago












7 Answers
7






active

oldest

votes


















72














Continuing from the comments above:



Using is_integer():



Example from the docs:



>>> (1.5).is_integer()
False
>>> (1.0).is_integer()
True
>>> (1.4142135623730951).is_integer()
False
>>> (-2.0).is_integer()
True
>>> (3.2).is_integer()
False


INPUT:



s = [1.5, 1.0, 2.5, 3.54, 1.0, 4.4, 2.0]


Hence:



print([int(x) if x.is_integer() else x for x in s])


Wrapped in a function:



def func(s):
return [int(x) if x.is_integer() else x for x in s]

print(func(s))


If you do not want any import:



def func(s):
return [int(x) if x == int(x) else x for x in s]

print(func(s))


Using map() with lambda function and the iter s:



print(list(map(lambda x: int(x) if x.is_integer() else x, s)))


OR



print(list(map(lambda x: int(x) if int(x) == x else x, s)))


Using strip('.0') on str converted list:



s = [str(x) for x in s]

def func(s):
s = [x.strip('.0') for x in s]
return [float(x) if x == x.strip('.0') else x for x in s]

print(func(s))


OUTPUT:



[1.5, 1, 2.5, 3.54, 1, 4.4, 2]





share|improve this answer




















  • 13





    If anyone is curious about about the limits of is_integer() and how far away from 1.0 a floating point number can be and still be considered an integer, I wrote a short script to find the limit. It's a very small number, much more precision than I have ever needed for anything. (1.0 + 1.1102230246251566636831481088739149080825883254353483864385054857848444953560829162597656251e-16).is_integer() returns False, but (1.0 + 1.1102230246251566636831481088739149080825883254353483864385054857848444953560829162597656250e-16).is_integer() returns True.

    – Josh Davis
    2 days ago






  • 21





    @JoshDavis That's just about rounding to 1.0 vs. 1.0 + sys.float_info.epsilon.

    – LegionMammal978
    2 days ago







  • 2





    @dan04 Even better: 1..is_integer()

    – Roman Odaisky
    2 days ago






  • 4





    @flakes: If that makes you angry, I feel compelled to point out that 1.bit_length() is illegal, but 1 .bit_length() (with a space after the 1, before the .) works perfectly. :-)

    – ShadowRanger
    2 days ago







  • 4





    @accdias: That won't always work either, since float has representational limits while int does not. Passing x = 1 << 1024 will cause your code to die with an OverflowError. So now you've got additional checks for safety, or exception handling.

    – ShadowRanger
    2 days ago


















24














In case your goal is to convert numbers to a concise string, you could simply use '%g' ("General Format") for formatting:



>>> '%g' % 1.0
'1'
>>> '%g' % 1
'1'
>>> '%g' % 1.5
'1.5'
>>> '%g' % 0.3
'0.3'
>>> '%g' % 0.9999999999
'1'


You can specify the desired accuracy:



>>> '%.15g' % 0.999999999999999
'0.999999999999999'
>>> '%.2g' % 0.999
'1'





share|improve this answer

























  • This is great but I had a query yesterday that for some reason I couldn't ask, this would turn 0.9 to 1 but considering one only wants 1.0 to 1 or 2.0 to 2 and not 0.9 to 1 or 1.9 to 2. Do we have a workabout in that case? cheers!

    – DirtyBit
    yesterday












  • @DirtyBit: Sorry, I really don't understand the question. '%g' % 0.9 is '0.9' and '%g' % 2.0 is '2'. Floats are displayed as ints only if they're really close to an int, e.g. 0.9999995. But not 0.9 or 0.99

    – Eric Duminil
    yesterday











  • exactly: print('%g' % 0.9999999999) # 1 but let's say the req. was to only have 1 if it was 1.0 and not 0.9999999999?

    – DirtyBit
    yesterday







  • 2





    @DirtyBit: You can specify the desired accuracy : '%.15g' % 0.999999999999999 is '0.999999999999999' and '%.2g' % 0.999is '1'. From this article : Rounding error is the characteristic feature of floating-point computation.

    – Eric Duminil
    yesterday











  • that is fascinating but still gives a little sense of hardcoding. no? Nevertheless, you have my upvote!

    – DirtyBit
    yesterday



















6














float.is_integer is a method on floats that returns whether or not the float represents an integer.



You can just use this function I made called to_int, that uses is_integer to check whether it represents an integer (e.g. 1.0) or not (e.g. 1.5).



If it represents an integer, return int(a), otherwise just return it's original value.



As you see, I am not using elif or else because return exits the function:



def to_int(a):
if a.is_integer():
return int(a)
return a

print(to_int(1.5))
print(to_int(1.0))


Output:



1.5
1





share|improve this answer




















  • 4





    rstrip is not much better than replace, try passing 1000.0

    – Roman Odaisky
    yesterday











  • @RomanOdaisky I deleted that section, you can un-down-vote now :-)

    – U9-Forward
    1 hour ago


















5














Python floats are approximations, so something that prints as 1.0 is not necessarily exactly 1.0. If you want to see if something is approximately an integer, use a sufficiently small epsilon value.



EPSILON = 0.0001 # Make this smaller or larger depending on desired accuracy

def func(x):
if abs(x - round(x)) < EPSILON:
return round(x)
else:
return x


In general, if you're checking whether a float is == to something, that tends to be a code smell, as floating point values are inherently approximate. It's more appropriate in general to check whether a float is near something, within some epsilon range.






share|improve this answer




















  • 2





    While most floating point values are approximations, there are many integers that can be represented exactly. A 64-bit IEEE 754 floating point number (as used in Python and other languages) can represent exactly any signed integer that fits in 53 bits or less. Such integers can be converted 1 to 1 between a 64-bit float and 64-bit integer assuming the integer value could be represented with as little as 53 bits. Addition, subtraction, and multiplication that stays within 53-bits of integer space should yield identical results per IEEE 754 spec.

    – penguin359
    2 days ago






  • 1





    @penguin359 While I agree that integers can be represented exactly in floating point, if you're in the situation that OP is in, you need to ask yourself how close to an integer is "close enough" for your purpose. Is 1.0 + 1e-16 "close enough"? Is 1.0 + 2e-16? It's an important question, as IEEE 754-based "is integer" methods will treat them differently, and you may or may not want to consider 1.0 + 2e-16 "not an integer" while saying 1.0 + 1e-16 is one. -- Having an explicit epsilon (versus the implicit one from IEEE 754) makes your desires clearer.

    – R.M.
    2 days ago











  • A comment seeming best at this answer: Setting an epsilon works as in the example provided works fine. Alternatively, especially if dealing with cents (currencies in general), I found it more useful to change from Python's default of binary representation to decimal one, as provided by module decimal (docs.python.org/3.7/library/decimal.html). The difference, for example in a loop iterating from -1 to +1 in increments of 0.1 is either passing very close to 0, or right at 0.0 -- without need for an epsilon set (how would you deal with -1.3877787807814457e-16 currency units?).

    – Buttonwood
    2 days ago











  • "so something that prints as 1.0 is not necessarily exactly 1.0" That depends on the version of python. In modern python3 (IIRC since python 3.2) a float that prints as 1.0 is exactly 1.0. In older versions of python it may not be. Try "print (float(numpy.nextafter(1.0,2)))" to see what happens on your version.

    – plugwash
    yesterday


















1














What I used to do in the past in C++ is, lets say you have these variables:



float x = 1.5;
float y = 1.0;


Then you could do something like this:



if(x == (int)x) 
return 1;
else return 0;


This will return 0 because 1.5 is not equal to 1



if(y == (int)y) 
return 1;
else return 0;


This will return 1 because 1.0 is equal to 1



Of course your question is about Python and the function is_integer() should work great, I just thought some people might find this useful.






share|improve this answer








New contributor




Stefan Kostoski is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.















  • 1





    The question was to convert a float to int whenever the float in question has an integer value. AFAIK this is not possible in C++, because you cannot return different values from a function.

    – M.Herzkamp
    2 days ago






  • 3





    @M.Herzkamp you could have a union though.

    – Baldrickk
    2 days ago











  • And also you could set another integer variable and save the float there if the condition above is met

    – Stefan Kostoski
    2 days ago











  • The digression on C++ isn't really relevant. You can do the same thing in Python: foo = lambda x: int(x) if int(x) == x else x. (Or in Python 3.8, to avoid the duplicate call to int, lambda x: y if (y:=int(x)) == x else x.

    – chepner
    2 days ago











  • @chepner I tried foo = lambda x: int(x) if int(x) == x else x the very moment I wrote the answer above, for some reason it did not work for me in 3.6. Any clue?

    – DirtyBit
    2 days ago


















0














A safe approach using lambda and is_integer():



>>> to_int = lambda x: int(x) if float(x).is_integer() else x
>>> to_int(1)
1
>>> to_int(1.0)
1
>>> to_int(1.2)
1.2
>>>





share|improve this answer


















  • 1





    Why do you use a lambda instead of a function? Especially since you name your lambda?

    – Eric Duminil
    2 days ago











  • There is no special reason. I guess it just makes it easier to use everywhere else.

    – accdias
    yesterday






  • 2





    Okay. I meant to say that you could use def to_int(x): return int(x) if float(x).is_integer() else x instead. A lambda is an anonymous function. So a named lambda is just a function.

    – Eric Duminil
    yesterday











  • @EricDumini, I see your point.

    – accdias
    yesterday


















-2














A simple thing you could do is use the modulo operator:



if (myFloat % 1 == 0) // Number is an int
else // numer is not an int


(Note: Not real code (although compilable with some languages)!)



EDIT:
Thanks to "popular demand" here's some Python code (untested):



if myFloat % 1 = 0:
# Is an integer
return int(myFloat)
else:
# Is not an integer
return myFloat


Again, the code is untested, but I think it should work (not too familiar w/ Python, tbh)






share|improve this answer




















  • 2





    I'm sorry but that is not a valid Python structure, would you please have it a valid Python format or allow me to edit it for you?

    – DirtyBit
    2 days ago






  • 2





    As he mentioned, this is simply a logic. Not a working code. This should be fine IMO.

    – Amit Joshi
    2 days ago






  • 4





    And readers should also google why it isn't possible to use return outside of a function, or what the difference between == and = is?

    – Eric Duminil
    2 days ago






  • 8





    To avoid downvotes, you should either try to answer questions for languages you're familiar with or at the very least try to run your code before posting.

    – Eric Duminil
    2 days ago






  • 1





    @SimonC: Python syntax is close enough to pseudo-code that it doesn't really make sense to write pseudo-code for Python IMHO. Feel free to edit your answer with a correct Python syntax and I'd be happy to revert my downvote.

    – Eric Duminil
    yesterday











Your Answer






StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");

StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);

else
createEditor();

);

function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);



);






Raymond Shen is a new contributor. Be nice, and check out our Code of Conduct.









draft saved

draft discarded


















StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55510485%2fpython-return-float-1-0-as-int-1-but-float-1-5-as-float-1-5%23new-answer', 'question_page');

);

Post as a guest















Required, but never shown

























7 Answers
7






active

oldest

votes








7 Answers
7






active

oldest

votes









active

oldest

votes






active

oldest

votes









72














Continuing from the comments above:



Using is_integer():



Example from the docs:



>>> (1.5).is_integer()
False
>>> (1.0).is_integer()
True
>>> (1.4142135623730951).is_integer()
False
>>> (-2.0).is_integer()
True
>>> (3.2).is_integer()
False


INPUT:



s = [1.5, 1.0, 2.5, 3.54, 1.0, 4.4, 2.0]


Hence:



print([int(x) if x.is_integer() else x for x in s])


Wrapped in a function:



def func(s):
return [int(x) if x.is_integer() else x for x in s]

print(func(s))


If you do not want any import:



def func(s):
return [int(x) if x == int(x) else x for x in s]

print(func(s))


Using map() with lambda function and the iter s:



print(list(map(lambda x: int(x) if x.is_integer() else x, s)))


OR



print(list(map(lambda x: int(x) if int(x) == x else x, s)))


Using strip('.0') on str converted list:



s = [str(x) for x in s]

def func(s):
s = [x.strip('.0') for x in s]
return [float(x) if x == x.strip('.0') else x for x in s]

print(func(s))


OUTPUT:



[1.5, 1, 2.5, 3.54, 1, 4.4, 2]





share|improve this answer




















  • 13





    If anyone is curious about about the limits of is_integer() and how far away from 1.0 a floating point number can be and still be considered an integer, I wrote a short script to find the limit. It's a very small number, much more precision than I have ever needed for anything. (1.0 + 1.1102230246251566636831481088739149080825883254353483864385054857848444953560829162597656251e-16).is_integer() returns False, but (1.0 + 1.1102230246251566636831481088739149080825883254353483864385054857848444953560829162597656250e-16).is_integer() returns True.

    – Josh Davis
    2 days ago






  • 21





    @JoshDavis That's just about rounding to 1.0 vs. 1.0 + sys.float_info.epsilon.

    – LegionMammal978
    2 days ago







  • 2





    @dan04 Even better: 1..is_integer()

    – Roman Odaisky
    2 days ago






  • 4





    @flakes: If that makes you angry, I feel compelled to point out that 1.bit_length() is illegal, but 1 .bit_length() (with a space after the 1, before the .) works perfectly. :-)

    – ShadowRanger
    2 days ago







  • 4





    @accdias: That won't always work either, since float has representational limits while int does not. Passing x = 1 << 1024 will cause your code to die with an OverflowError. So now you've got additional checks for safety, or exception handling.

    – ShadowRanger
    2 days ago















72














Continuing from the comments above:



Using is_integer():



Example from the docs:



>>> (1.5).is_integer()
False
>>> (1.0).is_integer()
True
>>> (1.4142135623730951).is_integer()
False
>>> (-2.0).is_integer()
True
>>> (3.2).is_integer()
False


INPUT:



s = [1.5, 1.0, 2.5, 3.54, 1.0, 4.4, 2.0]


Hence:



print([int(x) if x.is_integer() else x for x in s])


Wrapped in a function:



def func(s):
return [int(x) if x.is_integer() else x for x in s]

print(func(s))


If you do not want any import:



def func(s):
return [int(x) if x == int(x) else x for x in s]

print(func(s))


Using map() with lambda function and the iter s:



print(list(map(lambda x: int(x) if x.is_integer() else x, s)))


OR



print(list(map(lambda x: int(x) if int(x) == x else x, s)))


Using strip('.0') on str converted list:



s = [str(x) for x in s]

def func(s):
s = [x.strip('.0') for x in s]
return [float(x) if x == x.strip('.0') else x for x in s]

print(func(s))


OUTPUT:



[1.5, 1, 2.5, 3.54, 1, 4.4, 2]





share|improve this answer




















  • 13





    If anyone is curious about about the limits of is_integer() and how far away from 1.0 a floating point number can be and still be considered an integer, I wrote a short script to find the limit. It's a very small number, much more precision than I have ever needed for anything. (1.0 + 1.1102230246251566636831481088739149080825883254353483864385054857848444953560829162597656251e-16).is_integer() returns False, but (1.0 + 1.1102230246251566636831481088739149080825883254353483864385054857848444953560829162597656250e-16).is_integer() returns True.

    – Josh Davis
    2 days ago






  • 21





    @JoshDavis That's just about rounding to 1.0 vs. 1.0 + sys.float_info.epsilon.

    – LegionMammal978
    2 days ago







  • 2





    @dan04 Even better: 1..is_integer()

    – Roman Odaisky
    2 days ago






  • 4





    @flakes: If that makes you angry, I feel compelled to point out that 1.bit_length() is illegal, but 1 .bit_length() (with a space after the 1, before the .) works perfectly. :-)

    – ShadowRanger
    2 days ago







  • 4





    @accdias: That won't always work either, since float has representational limits while int does not. Passing x = 1 << 1024 will cause your code to die with an OverflowError. So now you've got additional checks for safety, or exception handling.

    – ShadowRanger
    2 days ago













72












72








72







Continuing from the comments above:



Using is_integer():



Example from the docs:



>>> (1.5).is_integer()
False
>>> (1.0).is_integer()
True
>>> (1.4142135623730951).is_integer()
False
>>> (-2.0).is_integer()
True
>>> (3.2).is_integer()
False


INPUT:



s = [1.5, 1.0, 2.5, 3.54, 1.0, 4.4, 2.0]


Hence:



print([int(x) if x.is_integer() else x for x in s])


Wrapped in a function:



def func(s):
return [int(x) if x.is_integer() else x for x in s]

print(func(s))


If you do not want any import:



def func(s):
return [int(x) if x == int(x) else x for x in s]

print(func(s))


Using map() with lambda function and the iter s:



print(list(map(lambda x: int(x) if x.is_integer() else x, s)))


OR



print(list(map(lambda x: int(x) if int(x) == x else x, s)))


Using strip('.0') on str converted list:



s = [str(x) for x in s]

def func(s):
s = [x.strip('.0') for x in s]
return [float(x) if x == x.strip('.0') else x for x in s]

print(func(s))


OUTPUT:



[1.5, 1, 2.5, 3.54, 1, 4.4, 2]





share|improve this answer















Continuing from the comments above:



Using is_integer():



Example from the docs:



>>> (1.5).is_integer()
False
>>> (1.0).is_integer()
True
>>> (1.4142135623730951).is_integer()
False
>>> (-2.0).is_integer()
True
>>> (3.2).is_integer()
False


INPUT:



s = [1.5, 1.0, 2.5, 3.54, 1.0, 4.4, 2.0]


Hence:



print([int(x) if x.is_integer() else x for x in s])


Wrapped in a function:



def func(s):
return [int(x) if x.is_integer() else x for x in s]

print(func(s))


If you do not want any import:



def func(s):
return [int(x) if x == int(x) else x for x in s]

print(func(s))


Using map() with lambda function and the iter s:



print(list(map(lambda x: int(x) if x.is_integer() else x, s)))


OR



print(list(map(lambda x: int(x) if int(x) == x else x, s)))


Using strip('.0') on str converted list:



s = [str(x) for x in s]

def func(s):
s = [x.strip('.0') for x in s]
return [float(x) if x == x.strip('.0') else x for x in s]

print(func(s))


OUTPUT:



[1.5, 1, 2.5, 3.54, 1, 4.4, 2]






share|improve this answer














share|improve this answer



share|improve this answer








edited 23 hours ago

























answered 2 days ago









DirtyBitDirtyBit

12.3k31943




12.3k31943







  • 13





    If anyone is curious about about the limits of is_integer() and how far away from 1.0 a floating point number can be and still be considered an integer, I wrote a short script to find the limit. It's a very small number, much more precision than I have ever needed for anything. (1.0 + 1.1102230246251566636831481088739149080825883254353483864385054857848444953560829162597656251e-16).is_integer() returns False, but (1.0 + 1.1102230246251566636831481088739149080825883254353483864385054857848444953560829162597656250e-16).is_integer() returns True.

    – Josh Davis
    2 days ago






  • 21





    @JoshDavis That's just about rounding to 1.0 vs. 1.0 + sys.float_info.epsilon.

    – LegionMammal978
    2 days ago







  • 2





    @dan04 Even better: 1..is_integer()

    – Roman Odaisky
    2 days ago






  • 4





    @flakes: If that makes you angry, I feel compelled to point out that 1.bit_length() is illegal, but 1 .bit_length() (with a space after the 1, before the .) works perfectly. :-)

    – ShadowRanger
    2 days ago







  • 4





    @accdias: That won't always work either, since float has representational limits while int does not. Passing x = 1 << 1024 will cause your code to die with an OverflowError. So now you've got additional checks for safety, or exception handling.

    – ShadowRanger
    2 days ago












  • 13





    If anyone is curious about about the limits of is_integer() and how far away from 1.0 a floating point number can be and still be considered an integer, I wrote a short script to find the limit. It's a very small number, much more precision than I have ever needed for anything. (1.0 + 1.1102230246251566636831481088739149080825883254353483864385054857848444953560829162597656251e-16).is_integer() returns False, but (1.0 + 1.1102230246251566636831481088739149080825883254353483864385054857848444953560829162597656250e-16).is_integer() returns True.

    – Josh Davis
    2 days ago






  • 21





    @JoshDavis That's just about rounding to 1.0 vs. 1.0 + sys.float_info.epsilon.

    – LegionMammal978
    2 days ago







  • 2





    @dan04 Even better: 1..is_integer()

    – Roman Odaisky
    2 days ago






  • 4





    @flakes: If that makes you angry, I feel compelled to point out that 1.bit_length() is illegal, but 1 .bit_length() (with a space after the 1, before the .) works perfectly. :-)

    – ShadowRanger
    2 days ago







  • 4





    @accdias: That won't always work either, since float has representational limits while int does not. Passing x = 1 << 1024 will cause your code to die with an OverflowError. So now you've got additional checks for safety, or exception handling.

    – ShadowRanger
    2 days ago







13




13





If anyone is curious about about the limits of is_integer() and how far away from 1.0 a floating point number can be and still be considered an integer, I wrote a short script to find the limit. It's a very small number, much more precision than I have ever needed for anything. (1.0 + 1.1102230246251566636831481088739149080825883254353483864385054857848444953560829162597656251e-16).is_integer() returns False, but (1.0 + 1.1102230246251566636831481088739149080825883254353483864385054857848444953560829162597656250e-16).is_integer() returns True.

– Josh Davis
2 days ago





If anyone is curious about about the limits of is_integer() and how far away from 1.0 a floating point number can be and still be considered an integer, I wrote a short script to find the limit. It's a very small number, much more precision than I have ever needed for anything. (1.0 + 1.1102230246251566636831481088739149080825883254353483864385054857848444953560829162597656251e-16).is_integer() returns False, but (1.0 + 1.1102230246251566636831481088739149080825883254353483864385054857848444953560829162597656250e-16).is_integer() returns True.

– Josh Davis
2 days ago




21




21





@JoshDavis That's just about rounding to 1.0 vs. 1.0 + sys.float_info.epsilon.

– LegionMammal978
2 days ago






@JoshDavis That's just about rounding to 1.0 vs. 1.0 + sys.float_info.epsilon.

– LegionMammal978
2 days ago





2




2





@dan04 Even better: 1..is_integer()

– Roman Odaisky
2 days ago





@dan04 Even better: 1..is_integer()

– Roman Odaisky
2 days ago




4




4





@flakes: If that makes you angry, I feel compelled to point out that 1.bit_length() is illegal, but 1 .bit_length() (with a space after the 1, before the .) works perfectly. :-)

– ShadowRanger
2 days ago






@flakes: If that makes you angry, I feel compelled to point out that 1.bit_length() is illegal, but 1 .bit_length() (with a space after the 1, before the .) works perfectly. :-)

– ShadowRanger
2 days ago





4




4





@accdias: That won't always work either, since float has representational limits while int does not. Passing x = 1 << 1024 will cause your code to die with an OverflowError. So now you've got additional checks for safety, or exception handling.

– ShadowRanger
2 days ago





@accdias: That won't always work either, since float has representational limits while int does not. Passing x = 1 << 1024 will cause your code to die with an OverflowError. So now you've got additional checks for safety, or exception handling.

– ShadowRanger
2 days ago













24














In case your goal is to convert numbers to a concise string, you could simply use '%g' ("General Format") for formatting:



>>> '%g' % 1.0
'1'
>>> '%g' % 1
'1'
>>> '%g' % 1.5
'1.5'
>>> '%g' % 0.3
'0.3'
>>> '%g' % 0.9999999999
'1'


You can specify the desired accuracy:



>>> '%.15g' % 0.999999999999999
'0.999999999999999'
>>> '%.2g' % 0.999
'1'





share|improve this answer

























  • This is great but I had a query yesterday that for some reason I couldn't ask, this would turn 0.9 to 1 but considering one only wants 1.0 to 1 or 2.0 to 2 and not 0.9 to 1 or 1.9 to 2. Do we have a workabout in that case? cheers!

    – DirtyBit
    yesterday












  • @DirtyBit: Sorry, I really don't understand the question. '%g' % 0.9 is '0.9' and '%g' % 2.0 is '2'. Floats are displayed as ints only if they're really close to an int, e.g. 0.9999995. But not 0.9 or 0.99

    – Eric Duminil
    yesterday











  • exactly: print('%g' % 0.9999999999) # 1 but let's say the req. was to only have 1 if it was 1.0 and not 0.9999999999?

    – DirtyBit
    yesterday







  • 2





    @DirtyBit: You can specify the desired accuracy : '%.15g' % 0.999999999999999 is '0.999999999999999' and '%.2g' % 0.999is '1'. From this article : Rounding error is the characteristic feature of floating-point computation.

    – Eric Duminil
    yesterday











  • that is fascinating but still gives a little sense of hardcoding. no? Nevertheless, you have my upvote!

    – DirtyBit
    yesterday
















24














In case your goal is to convert numbers to a concise string, you could simply use '%g' ("General Format") for formatting:



>>> '%g' % 1.0
'1'
>>> '%g' % 1
'1'
>>> '%g' % 1.5
'1.5'
>>> '%g' % 0.3
'0.3'
>>> '%g' % 0.9999999999
'1'


You can specify the desired accuracy:



>>> '%.15g' % 0.999999999999999
'0.999999999999999'
>>> '%.2g' % 0.999
'1'





share|improve this answer

























  • This is great but I had a query yesterday that for some reason I couldn't ask, this would turn 0.9 to 1 but considering one only wants 1.0 to 1 or 2.0 to 2 and not 0.9 to 1 or 1.9 to 2. Do we have a workabout in that case? cheers!

    – DirtyBit
    yesterday












  • @DirtyBit: Sorry, I really don't understand the question. '%g' % 0.9 is '0.9' and '%g' % 2.0 is '2'. Floats are displayed as ints only if they're really close to an int, e.g. 0.9999995. But not 0.9 or 0.99

    – Eric Duminil
    yesterday











  • exactly: print('%g' % 0.9999999999) # 1 but let's say the req. was to only have 1 if it was 1.0 and not 0.9999999999?

    – DirtyBit
    yesterday







  • 2





    @DirtyBit: You can specify the desired accuracy : '%.15g' % 0.999999999999999 is '0.999999999999999' and '%.2g' % 0.999is '1'. From this article : Rounding error is the characteristic feature of floating-point computation.

    – Eric Duminil
    yesterday











  • that is fascinating but still gives a little sense of hardcoding. no? Nevertheless, you have my upvote!

    – DirtyBit
    yesterday














24












24








24







In case your goal is to convert numbers to a concise string, you could simply use '%g' ("General Format") for formatting:



>>> '%g' % 1.0
'1'
>>> '%g' % 1
'1'
>>> '%g' % 1.5
'1.5'
>>> '%g' % 0.3
'0.3'
>>> '%g' % 0.9999999999
'1'


You can specify the desired accuracy:



>>> '%.15g' % 0.999999999999999
'0.999999999999999'
>>> '%.2g' % 0.999
'1'





share|improve this answer















In case your goal is to convert numbers to a concise string, you could simply use '%g' ("General Format") for formatting:



>>> '%g' % 1.0
'1'
>>> '%g' % 1
'1'
>>> '%g' % 1.5
'1.5'
>>> '%g' % 0.3
'0.3'
>>> '%g' % 0.9999999999
'1'


You can specify the desired accuracy:



>>> '%.15g' % 0.999999999999999
'0.999999999999999'
>>> '%.2g' % 0.999
'1'






share|improve this answer














share|improve this answer



share|improve this answer








edited yesterday

























answered 2 days ago









Eric DuminilEric Duminil

40.9k63372




40.9k63372












  • This is great but I had a query yesterday that for some reason I couldn't ask, this would turn 0.9 to 1 but considering one only wants 1.0 to 1 or 2.0 to 2 and not 0.9 to 1 or 1.9 to 2. Do we have a workabout in that case? cheers!

    – DirtyBit
    yesterday












  • @DirtyBit: Sorry, I really don't understand the question. '%g' % 0.9 is '0.9' and '%g' % 2.0 is '2'. Floats are displayed as ints only if they're really close to an int, e.g. 0.9999995. But not 0.9 or 0.99

    – Eric Duminil
    yesterday











  • exactly: print('%g' % 0.9999999999) # 1 but let's say the req. was to only have 1 if it was 1.0 and not 0.9999999999?

    – DirtyBit
    yesterday







  • 2





    @DirtyBit: You can specify the desired accuracy : '%.15g' % 0.999999999999999 is '0.999999999999999' and '%.2g' % 0.999is '1'. From this article : Rounding error is the characteristic feature of floating-point computation.

    – Eric Duminil
    yesterday











  • that is fascinating but still gives a little sense of hardcoding. no? Nevertheless, you have my upvote!

    – DirtyBit
    yesterday


















  • This is great but I had a query yesterday that for some reason I couldn't ask, this would turn 0.9 to 1 but considering one only wants 1.0 to 1 or 2.0 to 2 and not 0.9 to 1 or 1.9 to 2. Do we have a workabout in that case? cheers!

    – DirtyBit
    yesterday












  • @DirtyBit: Sorry, I really don't understand the question. '%g' % 0.9 is '0.9' and '%g' % 2.0 is '2'. Floats are displayed as ints only if they're really close to an int, e.g. 0.9999995. But not 0.9 or 0.99

    – Eric Duminil
    yesterday











  • exactly: print('%g' % 0.9999999999) # 1 but let's say the req. was to only have 1 if it was 1.0 and not 0.9999999999?

    – DirtyBit
    yesterday







  • 2





    @DirtyBit: You can specify the desired accuracy : '%.15g' % 0.999999999999999 is '0.999999999999999' and '%.2g' % 0.999is '1'. From this article : Rounding error is the characteristic feature of floating-point computation.

    – Eric Duminil
    yesterday











  • that is fascinating but still gives a little sense of hardcoding. no? Nevertheless, you have my upvote!

    – DirtyBit
    yesterday

















This is great but I had a query yesterday that for some reason I couldn't ask, this would turn 0.9 to 1 but considering one only wants 1.0 to 1 or 2.0 to 2 and not 0.9 to 1 or 1.9 to 2. Do we have a workabout in that case? cheers!

– DirtyBit
yesterday






This is great but I had a query yesterday that for some reason I couldn't ask, this would turn 0.9 to 1 but considering one only wants 1.0 to 1 or 2.0 to 2 and not 0.9 to 1 or 1.9 to 2. Do we have a workabout in that case? cheers!

– DirtyBit
yesterday














@DirtyBit: Sorry, I really don't understand the question. '%g' % 0.9 is '0.9' and '%g' % 2.0 is '2'. Floats are displayed as ints only if they're really close to an int, e.g. 0.9999995. But not 0.9 or 0.99

– Eric Duminil
yesterday





@DirtyBit: Sorry, I really don't understand the question. '%g' % 0.9 is '0.9' and '%g' % 2.0 is '2'. Floats are displayed as ints only if they're really close to an int, e.g. 0.9999995. But not 0.9 or 0.99

– Eric Duminil
yesterday













exactly: print('%g' % 0.9999999999) # 1 but let's say the req. was to only have 1 if it was 1.0 and not 0.9999999999?

– DirtyBit
yesterday






exactly: print('%g' % 0.9999999999) # 1 but let's say the req. was to only have 1 if it was 1.0 and not 0.9999999999?

– DirtyBit
yesterday





2




2





@DirtyBit: You can specify the desired accuracy : '%.15g' % 0.999999999999999 is '0.999999999999999' and '%.2g' % 0.999is '1'. From this article : Rounding error is the characteristic feature of floating-point computation.

– Eric Duminil
yesterday





@DirtyBit: You can specify the desired accuracy : '%.15g' % 0.999999999999999 is '0.999999999999999' and '%.2g' % 0.999is '1'. From this article : Rounding error is the characteristic feature of floating-point computation.

– Eric Duminil
yesterday













that is fascinating but still gives a little sense of hardcoding. no? Nevertheless, you have my upvote!

– DirtyBit
yesterday






that is fascinating but still gives a little sense of hardcoding. no? Nevertheless, you have my upvote!

– DirtyBit
yesterday












6














float.is_integer is a method on floats that returns whether or not the float represents an integer.



You can just use this function I made called to_int, that uses is_integer to check whether it represents an integer (e.g. 1.0) or not (e.g. 1.5).



If it represents an integer, return int(a), otherwise just return it's original value.



As you see, I am not using elif or else because return exits the function:



def to_int(a):
if a.is_integer():
return int(a)
return a

print(to_int(1.5))
print(to_int(1.0))


Output:



1.5
1





share|improve this answer




















  • 4





    rstrip is not much better than replace, try passing 1000.0

    – Roman Odaisky
    yesterday











  • @RomanOdaisky I deleted that section, you can un-down-vote now :-)

    – U9-Forward
    1 hour ago















6














float.is_integer is a method on floats that returns whether or not the float represents an integer.



You can just use this function I made called to_int, that uses is_integer to check whether it represents an integer (e.g. 1.0) or not (e.g. 1.5).



If it represents an integer, return int(a), otherwise just return it's original value.



As you see, I am not using elif or else because return exits the function:



def to_int(a):
if a.is_integer():
return int(a)
return a

print(to_int(1.5))
print(to_int(1.0))


Output:



1.5
1





share|improve this answer




















  • 4





    rstrip is not much better than replace, try passing 1000.0

    – Roman Odaisky
    yesterday











  • @RomanOdaisky I deleted that section, you can un-down-vote now :-)

    – U9-Forward
    1 hour ago













6












6








6







float.is_integer is a method on floats that returns whether or not the float represents an integer.



You can just use this function I made called to_int, that uses is_integer to check whether it represents an integer (e.g. 1.0) or not (e.g. 1.5).



If it represents an integer, return int(a), otherwise just return it's original value.



As you see, I am not using elif or else because return exits the function:



def to_int(a):
if a.is_integer():
return int(a)
return a

print(to_int(1.5))
print(to_int(1.0))


Output:



1.5
1





share|improve this answer















float.is_integer is a method on floats that returns whether or not the float represents an integer.



You can just use this function I made called to_int, that uses is_integer to check whether it represents an integer (e.g. 1.0) or not (e.g. 1.5).



If it represents an integer, return int(a), otherwise just return it's original value.



As you see, I am not using elif or else because return exits the function:



def to_int(a):
if a.is_integer():
return int(a)
return a

print(to_int(1.5))
print(to_int(1.0))


Output:



1.5
1






share|improve this answer














share|improve this answer



share|improve this answer








edited 1 hour ago

























answered 2 days ago









U9-ForwardU9-Forward

17.9k51743




17.9k51743







  • 4





    rstrip is not much better than replace, try passing 1000.0

    – Roman Odaisky
    yesterday











  • @RomanOdaisky I deleted that section, you can un-down-vote now :-)

    – U9-Forward
    1 hour ago












  • 4





    rstrip is not much better than replace, try passing 1000.0

    – Roman Odaisky
    yesterday











  • @RomanOdaisky I deleted that section, you can un-down-vote now :-)

    – U9-Forward
    1 hour ago







4




4





rstrip is not much better than replace, try passing 1000.0

– Roman Odaisky
yesterday





rstrip is not much better than replace, try passing 1000.0

– Roman Odaisky
yesterday













@RomanOdaisky I deleted that section, you can un-down-vote now :-)

– U9-Forward
1 hour ago





@RomanOdaisky I deleted that section, you can un-down-vote now :-)

– U9-Forward
1 hour ago











5














Python floats are approximations, so something that prints as 1.0 is not necessarily exactly 1.0. If you want to see if something is approximately an integer, use a sufficiently small epsilon value.



EPSILON = 0.0001 # Make this smaller or larger depending on desired accuracy

def func(x):
if abs(x - round(x)) < EPSILON:
return round(x)
else:
return x


In general, if you're checking whether a float is == to something, that tends to be a code smell, as floating point values are inherently approximate. It's more appropriate in general to check whether a float is near something, within some epsilon range.






share|improve this answer




















  • 2





    While most floating point values are approximations, there are many integers that can be represented exactly. A 64-bit IEEE 754 floating point number (as used in Python and other languages) can represent exactly any signed integer that fits in 53 bits or less. Such integers can be converted 1 to 1 between a 64-bit float and 64-bit integer assuming the integer value could be represented with as little as 53 bits. Addition, subtraction, and multiplication that stays within 53-bits of integer space should yield identical results per IEEE 754 spec.

    – penguin359
    2 days ago






  • 1





    @penguin359 While I agree that integers can be represented exactly in floating point, if you're in the situation that OP is in, you need to ask yourself how close to an integer is "close enough" for your purpose. Is 1.0 + 1e-16 "close enough"? Is 1.0 + 2e-16? It's an important question, as IEEE 754-based "is integer" methods will treat them differently, and you may or may not want to consider 1.0 + 2e-16 "not an integer" while saying 1.0 + 1e-16 is one. -- Having an explicit epsilon (versus the implicit one from IEEE 754) makes your desires clearer.

    – R.M.
    2 days ago











  • A comment seeming best at this answer: Setting an epsilon works as in the example provided works fine. Alternatively, especially if dealing with cents (currencies in general), I found it more useful to change from Python's default of binary representation to decimal one, as provided by module decimal (docs.python.org/3.7/library/decimal.html). The difference, for example in a loop iterating from -1 to +1 in increments of 0.1 is either passing very close to 0, or right at 0.0 -- without need for an epsilon set (how would you deal with -1.3877787807814457e-16 currency units?).

    – Buttonwood
    2 days ago











  • "so something that prints as 1.0 is not necessarily exactly 1.0" That depends on the version of python. In modern python3 (IIRC since python 3.2) a float that prints as 1.0 is exactly 1.0. In older versions of python it may not be. Try "print (float(numpy.nextafter(1.0,2)))" to see what happens on your version.

    – plugwash
    yesterday















5














Python floats are approximations, so something that prints as 1.0 is not necessarily exactly 1.0. If you want to see if something is approximately an integer, use a sufficiently small epsilon value.



EPSILON = 0.0001 # Make this smaller or larger depending on desired accuracy

def func(x):
if abs(x - round(x)) < EPSILON:
return round(x)
else:
return x


In general, if you're checking whether a float is == to something, that tends to be a code smell, as floating point values are inherently approximate. It's more appropriate in general to check whether a float is near something, within some epsilon range.






share|improve this answer




















  • 2





    While most floating point values are approximations, there are many integers that can be represented exactly. A 64-bit IEEE 754 floating point number (as used in Python and other languages) can represent exactly any signed integer that fits in 53 bits or less. Such integers can be converted 1 to 1 between a 64-bit float and 64-bit integer assuming the integer value could be represented with as little as 53 bits. Addition, subtraction, and multiplication that stays within 53-bits of integer space should yield identical results per IEEE 754 spec.

    – penguin359
    2 days ago






  • 1





    @penguin359 While I agree that integers can be represented exactly in floating point, if you're in the situation that OP is in, you need to ask yourself how close to an integer is "close enough" for your purpose. Is 1.0 + 1e-16 "close enough"? Is 1.0 + 2e-16? It's an important question, as IEEE 754-based "is integer" methods will treat them differently, and you may or may not want to consider 1.0 + 2e-16 "not an integer" while saying 1.0 + 1e-16 is one. -- Having an explicit epsilon (versus the implicit one from IEEE 754) makes your desires clearer.

    – R.M.
    2 days ago











  • A comment seeming best at this answer: Setting an epsilon works as in the example provided works fine. Alternatively, especially if dealing with cents (currencies in general), I found it more useful to change from Python's default of binary representation to decimal one, as provided by module decimal (docs.python.org/3.7/library/decimal.html). The difference, for example in a loop iterating from -1 to +1 in increments of 0.1 is either passing very close to 0, or right at 0.0 -- without need for an epsilon set (how would you deal with -1.3877787807814457e-16 currency units?).

    – Buttonwood
    2 days ago











  • "so something that prints as 1.0 is not necessarily exactly 1.0" That depends on the version of python. In modern python3 (IIRC since python 3.2) a float that prints as 1.0 is exactly 1.0. In older versions of python it may not be. Try "print (float(numpy.nextafter(1.0,2)))" to see what happens on your version.

    – plugwash
    yesterday













5












5








5







Python floats are approximations, so something that prints as 1.0 is not necessarily exactly 1.0. If you want to see if something is approximately an integer, use a sufficiently small epsilon value.



EPSILON = 0.0001 # Make this smaller or larger depending on desired accuracy

def func(x):
if abs(x - round(x)) < EPSILON:
return round(x)
else:
return x


In general, if you're checking whether a float is == to something, that tends to be a code smell, as floating point values are inherently approximate. It's more appropriate in general to check whether a float is near something, within some epsilon range.






share|improve this answer















Python floats are approximations, so something that prints as 1.0 is not necessarily exactly 1.0. If you want to see if something is approximately an integer, use a sufficiently small epsilon value.



EPSILON = 0.0001 # Make this smaller or larger depending on desired accuracy

def func(x):
if abs(x - round(x)) < EPSILON:
return round(x)
else:
return x


In general, if you're checking whether a float is == to something, that tends to be a code smell, as floating point values are inherently approximate. It's more appropriate in general to check whether a float is near something, within some epsilon range.







share|improve this answer














share|improve this answer



share|improve this answer








edited 2 days ago

























answered 2 days ago









Silvio MayoloSilvio Mayolo

14.8k22554




14.8k22554







  • 2





    While most floating point values are approximations, there are many integers that can be represented exactly. A 64-bit IEEE 754 floating point number (as used in Python and other languages) can represent exactly any signed integer that fits in 53 bits or less. Such integers can be converted 1 to 1 between a 64-bit float and 64-bit integer assuming the integer value could be represented with as little as 53 bits. Addition, subtraction, and multiplication that stays within 53-bits of integer space should yield identical results per IEEE 754 spec.

    – penguin359
    2 days ago






  • 1





    @penguin359 While I agree that integers can be represented exactly in floating point, if you're in the situation that OP is in, you need to ask yourself how close to an integer is "close enough" for your purpose. Is 1.0 + 1e-16 "close enough"? Is 1.0 + 2e-16? It's an important question, as IEEE 754-based "is integer" methods will treat them differently, and you may or may not want to consider 1.0 + 2e-16 "not an integer" while saying 1.0 + 1e-16 is one. -- Having an explicit epsilon (versus the implicit one from IEEE 754) makes your desires clearer.

    – R.M.
    2 days ago











  • A comment seeming best at this answer: Setting an epsilon works as in the example provided works fine. Alternatively, especially if dealing with cents (currencies in general), I found it more useful to change from Python's default of binary representation to decimal one, as provided by module decimal (docs.python.org/3.7/library/decimal.html). The difference, for example in a loop iterating from -1 to +1 in increments of 0.1 is either passing very close to 0, or right at 0.0 -- without need for an epsilon set (how would you deal with -1.3877787807814457e-16 currency units?).

    – Buttonwood
    2 days ago











  • "so something that prints as 1.0 is not necessarily exactly 1.0" That depends on the version of python. In modern python3 (IIRC since python 3.2) a float that prints as 1.0 is exactly 1.0. In older versions of python it may not be. Try "print (float(numpy.nextafter(1.0,2)))" to see what happens on your version.

    – plugwash
    yesterday












  • 2





    While most floating point values are approximations, there are many integers that can be represented exactly. A 64-bit IEEE 754 floating point number (as used in Python and other languages) can represent exactly any signed integer that fits in 53 bits or less. Such integers can be converted 1 to 1 between a 64-bit float and 64-bit integer assuming the integer value could be represented with as little as 53 bits. Addition, subtraction, and multiplication that stays within 53-bits of integer space should yield identical results per IEEE 754 spec.

    – penguin359
    2 days ago






  • 1





    @penguin359 While I agree that integers can be represented exactly in floating point, if you're in the situation that OP is in, you need to ask yourself how close to an integer is "close enough" for your purpose. Is 1.0 + 1e-16 "close enough"? Is 1.0 + 2e-16? It's an important question, as IEEE 754-based "is integer" methods will treat them differently, and you may or may not want to consider 1.0 + 2e-16 "not an integer" while saying 1.0 + 1e-16 is one. -- Having an explicit epsilon (versus the implicit one from IEEE 754) makes your desires clearer.

    – R.M.
    2 days ago











  • A comment seeming best at this answer: Setting an epsilon works as in the example provided works fine. Alternatively, especially if dealing with cents (currencies in general), I found it more useful to change from Python's default of binary representation to decimal one, as provided by module decimal (docs.python.org/3.7/library/decimal.html). The difference, for example in a loop iterating from -1 to +1 in increments of 0.1 is either passing very close to 0, or right at 0.0 -- without need for an epsilon set (how would you deal with -1.3877787807814457e-16 currency units?).

    – Buttonwood
    2 days ago











  • "so something that prints as 1.0 is not necessarily exactly 1.0" That depends on the version of python. In modern python3 (IIRC since python 3.2) a float that prints as 1.0 is exactly 1.0. In older versions of python it may not be. Try "print (float(numpy.nextafter(1.0,2)))" to see what happens on your version.

    – plugwash
    yesterday







2




2





While most floating point values are approximations, there are many integers that can be represented exactly. A 64-bit IEEE 754 floating point number (as used in Python and other languages) can represent exactly any signed integer that fits in 53 bits or less. Such integers can be converted 1 to 1 between a 64-bit float and 64-bit integer assuming the integer value could be represented with as little as 53 bits. Addition, subtraction, and multiplication that stays within 53-bits of integer space should yield identical results per IEEE 754 spec.

– penguin359
2 days ago





While most floating point values are approximations, there are many integers that can be represented exactly. A 64-bit IEEE 754 floating point number (as used in Python and other languages) can represent exactly any signed integer that fits in 53 bits or less. Such integers can be converted 1 to 1 between a 64-bit float and 64-bit integer assuming the integer value could be represented with as little as 53 bits. Addition, subtraction, and multiplication that stays within 53-bits of integer space should yield identical results per IEEE 754 spec.

– penguin359
2 days ago




1




1





@penguin359 While I agree that integers can be represented exactly in floating point, if you're in the situation that OP is in, you need to ask yourself how close to an integer is "close enough" for your purpose. Is 1.0 + 1e-16 "close enough"? Is 1.0 + 2e-16? It's an important question, as IEEE 754-based "is integer" methods will treat them differently, and you may or may not want to consider 1.0 + 2e-16 "not an integer" while saying 1.0 + 1e-16 is one. -- Having an explicit epsilon (versus the implicit one from IEEE 754) makes your desires clearer.

– R.M.
2 days ago





@penguin359 While I agree that integers can be represented exactly in floating point, if you're in the situation that OP is in, you need to ask yourself how close to an integer is "close enough" for your purpose. Is 1.0 + 1e-16 "close enough"? Is 1.0 + 2e-16? It's an important question, as IEEE 754-based "is integer" methods will treat them differently, and you may or may not want to consider 1.0 + 2e-16 "not an integer" while saying 1.0 + 1e-16 is one. -- Having an explicit epsilon (versus the implicit one from IEEE 754) makes your desires clearer.

– R.M.
2 days ago













A comment seeming best at this answer: Setting an epsilon works as in the example provided works fine. Alternatively, especially if dealing with cents (currencies in general), I found it more useful to change from Python's default of binary representation to decimal one, as provided by module decimal (docs.python.org/3.7/library/decimal.html). The difference, for example in a loop iterating from -1 to +1 in increments of 0.1 is either passing very close to 0, or right at 0.0 -- without need for an epsilon set (how would you deal with -1.3877787807814457e-16 currency units?).

– Buttonwood
2 days ago





A comment seeming best at this answer: Setting an epsilon works as in the example provided works fine. Alternatively, especially if dealing with cents (currencies in general), I found it more useful to change from Python's default of binary representation to decimal one, as provided by module decimal (docs.python.org/3.7/library/decimal.html). The difference, for example in a loop iterating from -1 to +1 in increments of 0.1 is either passing very close to 0, or right at 0.0 -- without need for an epsilon set (how would you deal with -1.3877787807814457e-16 currency units?).

– Buttonwood
2 days ago













"so something that prints as 1.0 is not necessarily exactly 1.0" That depends on the version of python. In modern python3 (IIRC since python 3.2) a float that prints as 1.0 is exactly 1.0. In older versions of python it may not be. Try "print (float(numpy.nextafter(1.0,2)))" to see what happens on your version.

– plugwash
yesterday





"so something that prints as 1.0 is not necessarily exactly 1.0" That depends on the version of python. In modern python3 (IIRC since python 3.2) a float that prints as 1.0 is exactly 1.0. In older versions of python it may not be. Try "print (float(numpy.nextafter(1.0,2)))" to see what happens on your version.

– plugwash
yesterday











1














What I used to do in the past in C++ is, lets say you have these variables:



float x = 1.5;
float y = 1.0;


Then you could do something like this:



if(x == (int)x) 
return 1;
else return 0;


This will return 0 because 1.5 is not equal to 1



if(y == (int)y) 
return 1;
else return 0;


This will return 1 because 1.0 is equal to 1



Of course your question is about Python and the function is_integer() should work great, I just thought some people might find this useful.






share|improve this answer








New contributor




Stefan Kostoski is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.















  • 1





    The question was to convert a float to int whenever the float in question has an integer value. AFAIK this is not possible in C++, because you cannot return different values from a function.

    – M.Herzkamp
    2 days ago






  • 3





    @M.Herzkamp you could have a union though.

    – Baldrickk
    2 days ago











  • And also you could set another integer variable and save the float there if the condition above is met

    – Stefan Kostoski
    2 days ago











  • The digression on C++ isn't really relevant. You can do the same thing in Python: foo = lambda x: int(x) if int(x) == x else x. (Or in Python 3.8, to avoid the duplicate call to int, lambda x: y if (y:=int(x)) == x else x.

    – chepner
    2 days ago











  • @chepner I tried foo = lambda x: int(x) if int(x) == x else x the very moment I wrote the answer above, for some reason it did not work for me in 3.6. Any clue?

    – DirtyBit
    2 days ago















1














What I used to do in the past in C++ is, lets say you have these variables:



float x = 1.5;
float y = 1.0;


Then you could do something like this:



if(x == (int)x) 
return 1;
else return 0;


This will return 0 because 1.5 is not equal to 1



if(y == (int)y) 
return 1;
else return 0;


This will return 1 because 1.0 is equal to 1



Of course your question is about Python and the function is_integer() should work great, I just thought some people might find this useful.






share|improve this answer








New contributor




Stefan Kostoski is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.















  • 1





    The question was to convert a float to int whenever the float in question has an integer value. AFAIK this is not possible in C++, because you cannot return different values from a function.

    – M.Herzkamp
    2 days ago






  • 3





    @M.Herzkamp you could have a union though.

    – Baldrickk
    2 days ago











  • And also you could set another integer variable and save the float there if the condition above is met

    – Stefan Kostoski
    2 days ago











  • The digression on C++ isn't really relevant. You can do the same thing in Python: foo = lambda x: int(x) if int(x) == x else x. (Or in Python 3.8, to avoid the duplicate call to int, lambda x: y if (y:=int(x)) == x else x.

    – chepner
    2 days ago











  • @chepner I tried foo = lambda x: int(x) if int(x) == x else x the very moment I wrote the answer above, for some reason it did not work for me in 3.6. Any clue?

    – DirtyBit
    2 days ago













1












1








1







What I used to do in the past in C++ is, lets say you have these variables:



float x = 1.5;
float y = 1.0;


Then you could do something like this:



if(x == (int)x) 
return 1;
else return 0;


This will return 0 because 1.5 is not equal to 1



if(y == (int)y) 
return 1;
else return 0;


This will return 1 because 1.0 is equal to 1



Of course your question is about Python and the function is_integer() should work great, I just thought some people might find this useful.






share|improve this answer








New contributor




Stefan Kostoski is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.










What I used to do in the past in C++ is, lets say you have these variables:



float x = 1.5;
float y = 1.0;


Then you could do something like this:



if(x == (int)x) 
return 1;
else return 0;


This will return 0 because 1.5 is not equal to 1



if(y == (int)y) 
return 1;
else return 0;


This will return 1 because 1.0 is equal to 1



Of course your question is about Python and the function is_integer() should work great, I just thought some people might find this useful.







share|improve this answer








New contributor




Stefan Kostoski is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









share|improve this answer



share|improve this answer






New contributor




Stefan Kostoski is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









answered 2 days ago









Stefan KostoskiStefan Kostoski

111




111




New contributor




Stefan Kostoski is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.





New contributor





Stefan Kostoski is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.






Stefan Kostoski is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.







  • 1





    The question was to convert a float to int whenever the float in question has an integer value. AFAIK this is not possible in C++, because you cannot return different values from a function.

    – M.Herzkamp
    2 days ago






  • 3





    @M.Herzkamp you could have a union though.

    – Baldrickk
    2 days ago











  • And also you could set another integer variable and save the float there if the condition above is met

    – Stefan Kostoski
    2 days ago











  • The digression on C++ isn't really relevant. You can do the same thing in Python: foo = lambda x: int(x) if int(x) == x else x. (Or in Python 3.8, to avoid the duplicate call to int, lambda x: y if (y:=int(x)) == x else x.

    – chepner
    2 days ago











  • @chepner I tried foo = lambda x: int(x) if int(x) == x else x the very moment I wrote the answer above, for some reason it did not work for me in 3.6. Any clue?

    – DirtyBit
    2 days ago












  • 1





    The question was to convert a float to int whenever the float in question has an integer value. AFAIK this is not possible in C++, because you cannot return different values from a function.

    – M.Herzkamp
    2 days ago






  • 3





    @M.Herzkamp you could have a union though.

    – Baldrickk
    2 days ago











  • And also you could set another integer variable and save the float there if the condition above is met

    – Stefan Kostoski
    2 days ago











  • The digression on C++ isn't really relevant. You can do the same thing in Python: foo = lambda x: int(x) if int(x) == x else x. (Or in Python 3.8, to avoid the duplicate call to int, lambda x: y if (y:=int(x)) == x else x.

    – chepner
    2 days ago











  • @chepner I tried foo = lambda x: int(x) if int(x) == x else x the very moment I wrote the answer above, for some reason it did not work for me in 3.6. Any clue?

    – DirtyBit
    2 days ago







1




1





The question was to convert a float to int whenever the float in question has an integer value. AFAIK this is not possible in C++, because you cannot return different values from a function.

– M.Herzkamp
2 days ago





The question was to convert a float to int whenever the float in question has an integer value. AFAIK this is not possible in C++, because you cannot return different values from a function.

– M.Herzkamp
2 days ago




3




3





@M.Herzkamp you could have a union though.

– Baldrickk
2 days ago





@M.Herzkamp you could have a union though.

– Baldrickk
2 days ago













And also you could set another integer variable and save the float there if the condition above is met

– Stefan Kostoski
2 days ago





And also you could set another integer variable and save the float there if the condition above is met

– Stefan Kostoski
2 days ago













The digression on C++ isn't really relevant. You can do the same thing in Python: foo = lambda x: int(x) if int(x) == x else x. (Or in Python 3.8, to avoid the duplicate call to int, lambda x: y if (y:=int(x)) == x else x.

– chepner
2 days ago





The digression on C++ isn't really relevant. You can do the same thing in Python: foo = lambda x: int(x) if int(x) == x else x. (Or in Python 3.8, to avoid the duplicate call to int, lambda x: y if (y:=int(x)) == x else x.

– chepner
2 days ago













@chepner I tried foo = lambda x: int(x) if int(x) == x else x the very moment I wrote the answer above, for some reason it did not work for me in 3.6. Any clue?

– DirtyBit
2 days ago





@chepner I tried foo = lambda x: int(x) if int(x) == x else x the very moment I wrote the answer above, for some reason it did not work for me in 3.6. Any clue?

– DirtyBit
2 days ago











0














A safe approach using lambda and is_integer():



>>> to_int = lambda x: int(x) if float(x).is_integer() else x
>>> to_int(1)
1
>>> to_int(1.0)
1
>>> to_int(1.2)
1.2
>>>





share|improve this answer


















  • 1





    Why do you use a lambda instead of a function? Especially since you name your lambda?

    – Eric Duminil
    2 days ago











  • There is no special reason. I guess it just makes it easier to use everywhere else.

    – accdias
    yesterday






  • 2





    Okay. I meant to say that you could use def to_int(x): return int(x) if float(x).is_integer() else x instead. A lambda is an anonymous function. So a named lambda is just a function.

    – Eric Duminil
    yesterday











  • @EricDumini, I see your point.

    – accdias
    yesterday















0














A safe approach using lambda and is_integer():



>>> to_int = lambda x: int(x) if float(x).is_integer() else x
>>> to_int(1)
1
>>> to_int(1.0)
1
>>> to_int(1.2)
1.2
>>>





share|improve this answer


















  • 1





    Why do you use a lambda instead of a function? Especially since you name your lambda?

    – Eric Duminil
    2 days ago











  • There is no special reason. I guess it just makes it easier to use everywhere else.

    – accdias
    yesterday






  • 2





    Okay. I meant to say that you could use def to_int(x): return int(x) if float(x).is_integer() else x instead. A lambda is an anonymous function. So a named lambda is just a function.

    – Eric Duminil
    yesterday











  • @EricDumini, I see your point.

    – accdias
    yesterday













0












0








0







A safe approach using lambda and is_integer():



>>> to_int = lambda x: int(x) if float(x).is_integer() else x
>>> to_int(1)
1
>>> to_int(1.0)
1
>>> to_int(1.2)
1.2
>>>





share|improve this answer













A safe approach using lambda and is_integer():



>>> to_int = lambda x: int(x) if float(x).is_integer() else x
>>> to_int(1)
1
>>> to_int(1.0)
1
>>> to_int(1.2)
1.2
>>>






share|improve this answer












share|improve this answer



share|improve this answer










answered 2 days ago









accdiasaccdias

660612




660612







  • 1





    Why do you use a lambda instead of a function? Especially since you name your lambda?

    – Eric Duminil
    2 days ago











  • There is no special reason. I guess it just makes it easier to use everywhere else.

    – accdias
    yesterday






  • 2





    Okay. I meant to say that you could use def to_int(x): return int(x) if float(x).is_integer() else x instead. A lambda is an anonymous function. So a named lambda is just a function.

    – Eric Duminil
    yesterday











  • @EricDumini, I see your point.

    – accdias
    yesterday












  • 1





    Why do you use a lambda instead of a function? Especially since you name your lambda?

    – Eric Duminil
    2 days ago











  • There is no special reason. I guess it just makes it easier to use everywhere else.

    – accdias
    yesterday






  • 2





    Okay. I meant to say that you could use def to_int(x): return int(x) if float(x).is_integer() else x instead. A lambda is an anonymous function. So a named lambda is just a function.

    – Eric Duminil
    yesterday











  • @EricDumini, I see your point.

    – accdias
    yesterday







1




1





Why do you use a lambda instead of a function? Especially since you name your lambda?

– Eric Duminil
2 days ago





Why do you use a lambda instead of a function? Especially since you name your lambda?

– Eric Duminil
2 days ago













There is no special reason. I guess it just makes it easier to use everywhere else.

– accdias
yesterday





There is no special reason. I guess it just makes it easier to use everywhere else.

– accdias
yesterday




2




2





Okay. I meant to say that you could use def to_int(x): return int(x) if float(x).is_integer() else x instead. A lambda is an anonymous function. So a named lambda is just a function.

– Eric Duminil
yesterday





Okay. I meant to say that you could use def to_int(x): return int(x) if float(x).is_integer() else x instead. A lambda is an anonymous function. So a named lambda is just a function.

– Eric Duminil
yesterday













@EricDumini, I see your point.

– accdias
yesterday





@EricDumini, I see your point.

– accdias
yesterday











-2














A simple thing you could do is use the modulo operator:



if (myFloat % 1 == 0) // Number is an int
else // numer is not an int


(Note: Not real code (although compilable with some languages)!)



EDIT:
Thanks to "popular demand" here's some Python code (untested):



if myFloat % 1 = 0:
# Is an integer
return int(myFloat)
else:
# Is not an integer
return myFloat


Again, the code is untested, but I think it should work (not too familiar w/ Python, tbh)






share|improve this answer




















  • 2





    I'm sorry but that is not a valid Python structure, would you please have it a valid Python format or allow me to edit it for you?

    – DirtyBit
    2 days ago






  • 2





    As he mentioned, this is simply a logic. Not a working code. This should be fine IMO.

    – Amit Joshi
    2 days ago






  • 4





    And readers should also google why it isn't possible to use return outside of a function, or what the difference between == and = is?

    – Eric Duminil
    2 days ago






  • 8





    To avoid downvotes, you should either try to answer questions for languages you're familiar with or at the very least try to run your code before posting.

    – Eric Duminil
    2 days ago






  • 1





    @SimonC: Python syntax is close enough to pseudo-code that it doesn't really make sense to write pseudo-code for Python IMHO. Feel free to edit your answer with a correct Python syntax and I'd be happy to revert my downvote.

    – Eric Duminil
    yesterday















-2














A simple thing you could do is use the modulo operator:



if (myFloat % 1 == 0) // Number is an int
else // numer is not an int


(Note: Not real code (although compilable with some languages)!)



EDIT:
Thanks to "popular demand" here's some Python code (untested):



if myFloat % 1 = 0:
# Is an integer
return int(myFloat)
else:
# Is not an integer
return myFloat


Again, the code is untested, but I think it should work (not too familiar w/ Python, tbh)






share|improve this answer




















  • 2





    I'm sorry but that is not a valid Python structure, would you please have it a valid Python format or allow me to edit it for you?

    – DirtyBit
    2 days ago






  • 2





    As he mentioned, this is simply a logic. Not a working code. This should be fine IMO.

    – Amit Joshi
    2 days ago






  • 4





    And readers should also google why it isn't possible to use return outside of a function, or what the difference between == and = is?

    – Eric Duminil
    2 days ago






  • 8





    To avoid downvotes, you should either try to answer questions for languages you're familiar with or at the very least try to run your code before posting.

    – Eric Duminil
    2 days ago






  • 1





    @SimonC: Python syntax is close enough to pseudo-code that it doesn't really make sense to write pseudo-code for Python IMHO. Feel free to edit your answer with a correct Python syntax and I'd be happy to revert my downvote.

    – Eric Duminil
    yesterday













-2












-2








-2







A simple thing you could do is use the modulo operator:



if (myFloat % 1 == 0) // Number is an int
else // numer is not an int


(Note: Not real code (although compilable with some languages)!)



EDIT:
Thanks to "popular demand" here's some Python code (untested):



if myFloat % 1 = 0:
# Is an integer
return int(myFloat)
else:
# Is not an integer
return myFloat


Again, the code is untested, but I think it should work (not too familiar w/ Python, tbh)






share|improve this answer















A simple thing you could do is use the modulo operator:



if (myFloat % 1 == 0) // Number is an int
else // numer is not an int


(Note: Not real code (although compilable with some languages)!)



EDIT:
Thanks to "popular demand" here's some Python code (untested):



if myFloat % 1 = 0:
# Is an integer
return int(myFloat)
else:
# Is not an integer
return myFloat


Again, the code is untested, but I think it should work (not too familiar w/ Python, tbh)







share|improve this answer














share|improve this answer



share|improve this answer








edited 2 days ago

























answered 2 days ago









SimonCSimonC

503624




503624







  • 2





    I'm sorry but that is not a valid Python structure, would you please have it a valid Python format or allow me to edit it for you?

    – DirtyBit
    2 days ago






  • 2





    As he mentioned, this is simply a logic. Not a working code. This should be fine IMO.

    – Amit Joshi
    2 days ago






  • 4





    And readers should also google why it isn't possible to use return outside of a function, or what the difference between == and = is?

    – Eric Duminil
    2 days ago






  • 8





    To avoid downvotes, you should either try to answer questions for languages you're familiar with or at the very least try to run your code before posting.

    – Eric Duminil
    2 days ago






  • 1





    @SimonC: Python syntax is close enough to pseudo-code that it doesn't really make sense to write pseudo-code for Python IMHO. Feel free to edit your answer with a correct Python syntax and I'd be happy to revert my downvote.

    – Eric Duminil
    yesterday












  • 2





    I'm sorry but that is not a valid Python structure, would you please have it a valid Python format or allow me to edit it for you?

    – DirtyBit
    2 days ago






  • 2





    As he mentioned, this is simply a logic. Not a working code. This should be fine IMO.

    – Amit Joshi
    2 days ago






  • 4





    And readers should also google why it isn't possible to use return outside of a function, or what the difference between == and = is?

    – Eric Duminil
    2 days ago






  • 8





    To avoid downvotes, you should either try to answer questions for languages you're familiar with or at the very least try to run your code before posting.

    – Eric Duminil
    2 days ago






  • 1





    @SimonC: Python syntax is close enough to pseudo-code that it doesn't really make sense to write pseudo-code for Python IMHO. Feel free to edit your answer with a correct Python syntax and I'd be happy to revert my downvote.

    – Eric Duminil
    yesterday







2




2





I'm sorry but that is not a valid Python structure, would you please have it a valid Python format or allow me to edit it for you?

– DirtyBit
2 days ago





I'm sorry but that is not a valid Python structure, would you please have it a valid Python format or allow me to edit it for you?

– DirtyBit
2 days ago




2




2





As he mentioned, this is simply a logic. Not a working code. This should be fine IMO.

– Amit Joshi
2 days ago





As he mentioned, this is simply a logic. Not a working code. This should be fine IMO.

– Amit Joshi
2 days ago




4




4





And readers should also google why it isn't possible to use return outside of a function, or what the difference between == and = is?

– Eric Duminil
2 days ago





And readers should also google why it isn't possible to use return outside of a function, or what the difference between == and = is?

– Eric Duminil
2 days ago




8




8





To avoid downvotes, you should either try to answer questions for languages you're familiar with or at the very least try to run your code before posting.

– Eric Duminil
2 days ago





To avoid downvotes, you should either try to answer questions for languages you're familiar with or at the very least try to run your code before posting.

– Eric Duminil
2 days ago




1




1





@SimonC: Python syntax is close enough to pseudo-code that it doesn't really make sense to write pseudo-code for Python IMHO. Feel free to edit your answer with a correct Python syntax and I'd be happy to revert my downvote.

– Eric Duminil
yesterday





@SimonC: Python syntax is close enough to pseudo-code that it doesn't really make sense to write pseudo-code for Python IMHO. Feel free to edit your answer with a correct Python syntax and I'd be happy to revert my downvote.

– Eric Duminil
yesterday










Raymond Shen is a new contributor. Be nice, and check out our Code of Conduct.









draft saved

draft discarded


















Raymond Shen is a new contributor. Be nice, and check out our Code of Conduct.












Raymond Shen is a new contributor. Be nice, and check out our Code of Conduct.











Raymond Shen is a new contributor. Be nice, and check out our Code of Conduct.














Thanks for contributing an answer to Stack Overflow!


  • Please be sure to answer the question. Provide details and share your research!

But avoid


  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.

To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55510485%2fpython-return-float-1-0-as-int-1-but-float-1-5-as-float-1-5%23new-answer', 'question_page');

);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

getting Checkpoint VPN SSL Network Extender working in the command lineHow to connect to CheckPoint VPN on Ubuntu 18.04LTS?Will the Linux ( red-hat ) Open VPNC Client connect to checkpoint or nortel VPN gateways?VPN client for linux machine + support checkpoint gatewayVPN SSL Network Extender in FirefoxLinux Checkpoint SNX tool configuration issuesCheck Point - Connect under Linux - snx + OTPSNX VPN Ububuntu 18.XXUsing Checkpoint VPN SSL Network Extender CLI with certificateVPN with network manager (nm-applet) is not workingWill the Linux ( red-hat ) Open VPNC Client connect to checkpoint or nortel VPN gateways?VPN client for linux machine + support checkpoint gatewayImport VPN config files to NetworkManager from command lineTrouble connecting to VPN using network-manager, while command line worksStart a VPN connection with PPTP protocol on command linestarting a docker service daemon breaks the vpn networkCan't connect to vpn with Network-managerVPN SSL Network Extender in FirefoxUsing Checkpoint VPN SSL Network Extender CLI with certificate

Cannot Extend partition with GParted The 2019 Stack Overflow Developer Survey Results Are In Announcing the arrival of Valued Associate #679: Cesar Manara Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern) 2019 Community Moderator Election ResultsCan't increase partition size with GParted?GParted doesn't recognize the unallocated space after my current partitionWhat is the best way to add unallocated space located before to Ubuntu 12.04 partition with GParted live?I can't figure out how to extend my Arch home partition into free spaceGparted Linux Mint 18.1 issueTrying to extend but swap partition is showing as Unknown in Gparted, shows proper from fdiskRearrange partitions in gparted to extend a partitionUnable to extend partition even though unallocated space is next to it using GPartedAllocate free space to root partitiongparted: how to merge unallocated space with a partition

Marilyn Monroe Ny fiainany manokana | Jereo koa | Meny fitetezanafanitarana azy.