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

Àrd-bhaile Cathair chruinne/Baile mòr cruinne | Artagailean ceangailte | Clàr-taice na seòladaireachd

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

대한민국 목차 국명 지리 역사 정치 국방 경제 사회 문화 국제 순위 관련 항목 각주 외부 링크 둘러보기 메뉴북위 37° 34′ 08″ 동경 126° 58′ 36″ / 북위 37.568889° 동경 126.976667°  / 37.568889; 126.976667ehThe Korean Repository문단을 편집문단을 편집추가해Clarkson PLC 사Report for Selected Countries and Subjects-Korea“Human Development Index and its components: P.198”“http://www.law.go.kr/%EB%B2%95%EB%A0%B9/%EB%8C%80%ED%95%9C%EB%AF%BC%EA%B5%AD%EA%B5%AD%EA%B8%B0%EB%B2%95”"한국은 국제법상 한반도 유일 합법정부 아니다" - 오마이뉴스 모바일Report for Selected Countries and Subjects: South Korea격동의 역사와 함께한 조선일보 90년 : 조선일보 인수해 혁신시킨 신석우, 임시정부 때는 '대한민국' 국호(國號) 정해《우리가 몰랐던 우리 역사: 나라 이름의 비밀을 찾아가는 역사 여행》“남북 공식호칭 ‘남한’‘북한’으로 쓴다”“Corea 대 Korea, 누가 이긴 거야?”국내기후자료 - 한국[김대중 前 대통령 서거] 과감한 구조개혁 'DJ노믹스'로 최단기간 환란극복 :: 네이버 뉴스“이라크 "韓-쿠르드 유전개발 MOU 승인 안해"(종합)”“해외 우리국민 추방사례 43%가 일본”차기전차 K2'흑표'의 세계 최고 전력 분석, 쿠키뉴스 엄기영, 2007-03-02두산인프라, 헬기잡는 장갑차 'K21'...내년부터 공급, 고뉴스 이대준, 2008-10-30과거 내용 찾기mk 뉴스 - 구매력 기준으로 보면 한국 1인당 소득 3만弗과거 내용 찾기"The N-11: More Than an Acronym"Archived조선일보 최우석, 2008-11-01Global 500 2008: Countries - South Korea“몇년째 '시한폭탄'... 가계부채, 올해는 터질까”가구당 부채 5000만원 처음 넘어서“‘빚’으로 내몰리는 사회.. 위기의 가계대출”“[경제365] 공공부문 부채 급증…800조 육박”“"소득 양극화 다소 완화...불평등은 여전"”“공정사회·공생발전 한참 멀었네”iSuppli,08年2QのDRAMシェア・ランキングを発表(08/8/11)South Korea dominates shipbuilding industry | Stock Market News & Stocks to Watch from StraightStocks한국 자동차 생산, 3년 연속 세계 5위자동차수출 '현대-삼성 웃고 기아-대우-쌍용은 울고' 과거 내용 찾기동반성장위 창립 1주년 맞아Archived"중기적합 3개업종 합의 무시한 채 선정"李대통령, 사업 무분별 확장 소상공인 생계 위협 질타삼성-LG, 서민업종인 빵·분식사업 잇따라 철수상생은 뒷전…SSM ‘몸집 불리기’ 혈안Archived“경부고속도에 '아시안하이웨이' 표지판”'철의 실크로드' 앞서 '말(言)의 실크로드'부터, 프레시안 정창현, 2008-10-01“'서울 지하철은 안전한가?'”“서울시 “올해 안에 모든 지하철역 스크린도어 설치””“부산지하철 1,2호선 승강장 안전펜스 설치 완료”“전교조, 정부 노조 통계서 처음 빠져”“[Weekly BIZ] 도요타 '제로 이사회'가 리콜 사태 불러들였다”“S Korea slams high tuition costs”““정치가 여론 양극화 부채질… 합리주의 절실””“〈"`촛불집회'는 민주주의의 질적 변화 상징"〉”““촛불집회가 민주주의 왜곡 초래””“국민 65%, "한국 노사관계 대립적"”“한국 국가경쟁력 27위‥노사관계 '꼴찌'”“제대로 형성되지 않은 대한민국 이념지형”“[신년기획-갈등의 시대] 갈등지수 OECD 4위…사회적 손실 GDP 27% 무려 300조”“2012 총선-대선의 키워드는 '국민과 소통'”“한국 삶의 질 27위, 2000년과 2008년 연속 하위권 머물러”“[해피 코리아] 행복점수 68점…해외 평가선 '낙제점'”“한국 어린이·청소년 행복지수 3년 연속 OECD ‘꼴찌’”“한국 이혼율 OECD중 8위”“[통계청] 한국 이혼율 OECD 4위”“오피니언 [이렇게 생각한다] `부부의 날` 에 돌아본 이혼율 1위 한국”“Suicide Rates by Country, Global Health Observatory Data Repository.”“1. 또 다른 차별”“오피니언 [편집자에게] '왕따'와 '패거리 정치' 심리는 닮은꼴”“[미래한국리포트] 무한경쟁에 빠진 대한민국”“대학생 98% "외모가 경쟁력이라는 말 동의"”“특급호텔 웨딩·200만원대 유모차… "남보다 더…" 호화病, 고질병 됐다”“[스트레스 공화국] ① 경쟁사회, 스트레스 쌓인다”““매일 30여명 자살 한국, 의사보다 무속인에…””“"자살 부르는 '우울증', 환자 중 85% 치료 안 받아"”“정신병원을 가다”“대한민국도 ‘묻지마 범죄’,안전지대 아니다”“유엔 "학생 '성적 지향'에 따른 차별 금지하라"”“유엔아동권리위원회 보고서 및 번역본 원문”“고졸 성공스토리 담은 '제빵왕 김탁구' 드라마 나온다”“‘빛 좋은 개살구’ 고졸 취업…실습 대신 착취”원본 문서“정신건강, 사회적 편견부터 고쳐드립니다”‘소통’과 ‘행복’에 목 마른 사회가 잠들어 있던 ‘심리학’ 깨웠다“[포토] 사유리-곽금주 교수의 유쾌한 심리상담”“"올해 한국인 평균 영화관람횟수 세계 1위"(종합)”“[게임연중기획] 게임은 문화다-여가활동 1순위 게임”“영화속 ‘영어 지상주의’ …“왠지 씁쓸한데””“2월 `신문 부수 인증기관` 지정..방송법 후속작업”“무료신문 성장동력 ‘차별성’과 ‘갈등해소’”대한민국 국회 법률지식정보시스템"Pew Research Center's Religion & Public Life Project: South Korea"“amp;vwcd=MT_ZTITLE&path=인구·가구%20>%20인구총조사%20>%20인구부문%20>%20 총조사인구(2005)%20>%20전수부문&oper_YN=Y&item=&keyword=종교별%20인구& amp;lang_mode=kor&list_id= 2005년 통계청 인구 총조사”원본 문서“한국인이 좋아하는 취미와 운동 (2004-2009)”“한국인이 좋아하는 취미와 운동 (2004-2014)”Archived“한국, `부분적 언론자유국' 강등〈프리덤하우스〉”“국경없는기자회 "한국, 인터넷감시 대상국"”“한국, 조선산업 1위 유지(S. Korea Stays Top Shipbuilding Nation) RZD-Partner Portal”원본 문서“한국, 4년 만에 ‘선박건조 1위’”“옛 마산시,인터넷속도 세계 1위”“"한국 초고속 인터넷망 세계1위"”“인터넷·휴대폰 요금, 외국보다 훨씬 비싸”“한국 관세행정 6년 연속 세계 '1위'”“한국 교통사고 사망자 수 OECD 회원국 중 2위”“결핵 후진국' 한국, 환자가 급증한 이유는”“수술은 신중해야… 자칫하면 생명 위협”대한민국분류대한민국의 지도대한민국 정부대표 다국어포털대한민국 전자정부대한민국 국회한국방송공사about korea and information korea브리태니커 백과사전(한국편)론리플래닛의 정보(한국편)CIA의 세계 정보(한국편)마리암 부디아 (Mariam Budia),『한국: 하늘이 내린 한 폭의 그림』, 서울: 트랜스라틴 19호 (2012년 3월)대한민국ehehehehehehehehehehehehehehWorldCat132441370n791268020000 0001 2308 81034078029-6026373548cb11863345f(데이터)00573706ge128495