Python: return float 1.0 as int 1 but float 1.5 as float 1.5Calling 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?

What's the point of deactivating Num Lock on login screens?

If a Gelatinous Cube takes up the entire space of a Pit Trap, what happens when a creature falls into the trap but succeeds on the saving throw?

What is the word for reserving something for yourself before others do?

Why does Arabsat 6A need a Falcon Heavy to launch

Neighboring nodes in the network

How to say in German "enjoying home comforts"

Why is consensus so controversial in Britain?

AES: Why is it a good practice to use only the first 16bytes of a hash for encryption?

How can I make my BBEG immortal short of making them a Lich or Vampire?

Infinite Abelian subgroup of infinite non Abelian group example

Can I use a neutral wire from another outlet to repair a broken neutral?

If human space travel is limited by the G force vulnerability, is there a way to counter G forces?

Is it inappropriate for a student to attend their mentor's dissertation defense?

Why can't we play rap on piano?

How do conventional missiles fly?

Why doesn't H₄O²⁺ exist?

Where does SFDX store details about scratch orgs?

Is it legal for company to use my work email to pretend I still work there?

I'm flying to France today and my passport expires in less than 2 months

Can a rocket refuel on Mars from water?

Blender 2.8 I can't see vertices, edges or faces in edit mode

Watching something be written to a file live with tail

Why does Kotter return in Welcome Back Kotter

How do I write bicross product symbols in latex?



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


Calling 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;








18















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.















  • 3





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

    – DirtyBit
    18 hours ago







  • 4





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

    – Barmar
    18 hours ago






  • 42





    Why would you want to do this, anyway?

    – Barmar
    18 hours ago






  • 2





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

    – Federico S
    18 hours ago






  • 9





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

    – Lightness Races in Orbit
    15 hours ago

















18















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.















  • 3





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

    – DirtyBit
    18 hours ago







  • 4





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

    – Barmar
    18 hours ago






  • 42





    Why would you want to do this, anyway?

    – Barmar
    18 hours ago






  • 2





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

    – Federico S
    18 hours ago






  • 9





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

    – Lightness Races in Orbit
    15 hours ago













18












18








18


2






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 11 hours ago









DirtyBit

12.1k21943




12.1k21943






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 18 hours ago









Raymond ShenRaymond Shen

10614




10614




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.







  • 3





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

    – DirtyBit
    18 hours ago







  • 4





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

    – Barmar
    18 hours ago






  • 42





    Why would you want to do this, anyway?

    – Barmar
    18 hours ago






  • 2





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

    – Federico S
    18 hours ago






  • 9





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

    – Lightness Races in Orbit
    15 hours ago












  • 3





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

    – DirtyBit
    18 hours ago







  • 4





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

    – Barmar
    18 hours ago






  • 42





    Why would you want to do this, anyway?

    – Barmar
    18 hours ago






  • 2





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

    – Federico S
    18 hours ago






  • 9





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

    – Lightness Races in Orbit
    15 hours ago







3




3





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

– DirtyBit
18 hours ago






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

– DirtyBit
18 hours ago





4




4





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

– Barmar
18 hours ago





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

– Barmar
18 hours ago




42




42





Why would you want to do this, anyway?

– Barmar
18 hours ago





Why would you want to do this, anyway?

– Barmar
18 hours ago




2




2





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

– Federico S
18 hours 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
18 hours ago




9




9





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

– Lightness Races in Orbit
15 hours ago





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

– Lightness Races in Orbit
15 hours ago












6 Answers
6






active

oldest

votes


















55














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


Hence:



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

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


OUTPUT:



[1.5, 1, 2.5, 3.54, 1]


Wrapped in a function:



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

print(func(s))





share|improve this answer




















  • 6





    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
    7 hours ago






  • 11





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

    – LegionMammal978
    6 hours ago












  • Hey, I didn't know you could call a method directly on a float literal. I see why it tokenizes that way, with the first dot as a decimal point and the second dot as the attribute operator, but it looks so weird at first.

    – dan04
    5 hours ago






  • 2





    @dan04 Even better: 1..is_integer()

    – Roman Odaisky
    5 hours ago






  • 1





    @RomanOdaisky Lmao. I both hate and love language quirks like this. On the one hand they produce cryptic code, but on the other hand they make for great "how well do you know this language" quizzes.

    – flakes
    2 hours ago


















14














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'





share|improve this answer
































    6














    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
      8 hours 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.
      6 hours 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
      6 hours ago


















    6














    Use this function, is_integer is a function from the float class,



    You can just use this method to_int to use is_integer to check whether it is a integer (i.e 1.0) or a float (i.e 1.5),



    If it is a integer-like float, return int(a), otherwise just return it's original value,



    As you see, I am not using elif or else, just directly, because return only returns the first return's value:



    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


    References:




    https://python-reference.readthedocs.io/en/latest/docs/float/is_integer.html



    https://python-reference.readthedocs.io/en/latest/docs/float




    I just thought of another way, using replace of the str class, that works because you're only replacing .0, so .5 won't effect,



    Only problem is that 1.00 won't work, it will output 10,



    But this is still a simple solution:



    a = 1.5
    print(str(a).replace('.0', ''))
    b = 1.0
    print(str(b).replace('.0', ''))


    Output:



    1.5
    1


    References:




    https://python-reference.readthedocs.io/en/latest/docs/str/replace.html



    https://python-reference.readthedocs.io/en/latest/docs/str







    share|improve this answer
































      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
        14 hours ago






      • 3





        @M.Herzkamp you could have a union though.

        – Baldrickk
        14 hours ago











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

        – Stefan Kostoski
        13 hours 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
        13 hours 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
        13 hours ago


















      -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
        15 hours ago






      • 2





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

        – Amit Joshi
        13 hours ago











      • Added some Python code (I think). I'd like to know why the downvote? It's a simple solution that works. No weird functions or other constructs required. I didn't think an explanation was necessary, as modulo counts as basic arithmetic. IMO every developer should know what it does or should have the ability to invest 10 seconds into typing "modulo" in to the all-knowing search engine whom I shall not name.

        – SimonC
        13 hours 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
        12 hours ago






      • 7





        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
        12 hours ago











      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

























      6 Answers
      6






      active

      oldest

      votes








      6 Answers
      6






      active

      oldest

      votes









      active

      oldest

      votes






      active

      oldest

      votes









      55














      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


      Hence:



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

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


      OUTPUT:



      [1.5, 1, 2.5, 3.54, 1]


      Wrapped in a function:



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

      print(func(s))





      share|improve this answer




















      • 6





        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
        7 hours ago






      • 11





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

        – LegionMammal978
        6 hours ago












      • Hey, I didn't know you could call a method directly on a float literal. I see why it tokenizes that way, with the first dot as a decimal point and the second dot as the attribute operator, but it looks so weird at first.

        – dan04
        5 hours ago






      • 2





        @dan04 Even better: 1..is_integer()

        – Roman Odaisky
        5 hours ago






      • 1





        @RomanOdaisky Lmao. I both hate and love language quirks like this. On the one hand they produce cryptic code, but on the other hand they make for great "how well do you know this language" quizzes.

        – flakes
        2 hours ago















      55














      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


      Hence:



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

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


      OUTPUT:



      [1.5, 1, 2.5, 3.54, 1]


      Wrapped in a function:



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

      print(func(s))





      share|improve this answer




















      • 6





        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
        7 hours ago






      • 11





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

        – LegionMammal978
        6 hours ago












      • Hey, I didn't know you could call a method directly on a float literal. I see why it tokenizes that way, with the first dot as a decimal point and the second dot as the attribute operator, but it looks so weird at first.

        – dan04
        5 hours ago






      • 2





        @dan04 Even better: 1..is_integer()

        – Roman Odaisky
        5 hours ago






      • 1





        @RomanOdaisky Lmao. I both hate and love language quirks like this. On the one hand they produce cryptic code, but on the other hand they make for great "how well do you know this language" quizzes.

        – flakes
        2 hours ago













      55












      55








      55







      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


      Hence:



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

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


      OUTPUT:



      [1.5, 1, 2.5, 3.54, 1]


      Wrapped in a function:



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

      print(func(s))





      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


      Hence:



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

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


      OUTPUT:



      [1.5, 1, 2.5, 3.54, 1]


      Wrapped in a function:



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

      print(func(s))






      share|improve this answer














      share|improve this answer



      share|improve this answer








      edited 8 hours ago









      Rakete1111

      35.2k1084119




      35.2k1084119










      answered 18 hours ago









      DirtyBitDirtyBit

      12.1k21943




      12.1k21943







      • 6





        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
        7 hours ago






      • 11





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

        – LegionMammal978
        6 hours ago












      • Hey, I didn't know you could call a method directly on a float literal. I see why it tokenizes that way, with the first dot as a decimal point and the second dot as the attribute operator, but it looks so weird at first.

        – dan04
        5 hours ago






      • 2





        @dan04 Even better: 1..is_integer()

        – Roman Odaisky
        5 hours ago






      • 1





        @RomanOdaisky Lmao. I both hate and love language quirks like this. On the one hand they produce cryptic code, but on the other hand they make for great "how well do you know this language" quizzes.

        – flakes
        2 hours ago












      • 6





        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
        7 hours ago






      • 11





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

        – LegionMammal978
        6 hours ago












      • Hey, I didn't know you could call a method directly on a float literal. I see why it tokenizes that way, with the first dot as a decimal point and the second dot as the attribute operator, but it looks so weird at first.

        – dan04
        5 hours ago






      • 2





        @dan04 Even better: 1..is_integer()

        – Roman Odaisky
        5 hours ago






      • 1





        @RomanOdaisky Lmao. I both hate and love language quirks like this. On the one hand they produce cryptic code, but on the other hand they make for great "how well do you know this language" quizzes.

        – flakes
        2 hours ago







      6




      6





      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
      7 hours 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
      7 hours ago




      11




      11





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

      – LegionMammal978
      6 hours ago






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

      – LegionMammal978
      6 hours ago














      Hey, I didn't know you could call a method directly on a float literal. I see why it tokenizes that way, with the first dot as a decimal point and the second dot as the attribute operator, but it looks so weird at first.

      – dan04
      5 hours ago





      Hey, I didn't know you could call a method directly on a float literal. I see why it tokenizes that way, with the first dot as a decimal point and the second dot as the attribute operator, but it looks so weird at first.

      – dan04
      5 hours ago




      2




      2





      @dan04 Even better: 1..is_integer()

      – Roman Odaisky
      5 hours ago





      @dan04 Even better: 1..is_integer()

      – Roman Odaisky
      5 hours ago




      1




      1





      @RomanOdaisky Lmao. I both hate and love language quirks like this. On the one hand they produce cryptic code, but on the other hand they make for great "how well do you know this language" quizzes.

      – flakes
      2 hours ago





      @RomanOdaisky Lmao. I both hate and love language quirks like this. On the one hand they produce cryptic code, but on the other hand they make for great "how well do you know this language" quizzes.

      – flakes
      2 hours ago













      14














      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'





      share|improve this answer





























        14














        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'





        share|improve this answer



























          14












          14








          14







          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'





          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'






          share|improve this answer














          share|improve this answer



          share|improve this answer








          edited 13 hours ago

























          answered 14 hours ago









          Eric DuminilEric Duminil

          40.8k63372




          40.8k63372





















              6














              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
                8 hours 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.
                6 hours 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
                6 hours ago















              6














              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
                8 hours 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.
                6 hours 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
                6 hours ago













              6












              6








              6







              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 12 hours ago

























              answered 12 hours 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
                8 hours 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.
                6 hours 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
                6 hours ago












              • 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
                8 hours 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.
                6 hours 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
                6 hours ago







              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
              8 hours 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
              8 hours 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.
              6 hours 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.
              6 hours 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
              6 hours 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
              6 hours ago











              6














              Use this function, is_integer is a function from the float class,



              You can just use this method to_int to use is_integer to check whether it is a integer (i.e 1.0) or a float (i.e 1.5),



              If it is a integer-like float, return int(a), otherwise just return it's original value,



              As you see, I am not using elif or else, just directly, because return only returns the first return's value:



              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


              References:




              https://python-reference.readthedocs.io/en/latest/docs/float/is_integer.html



              https://python-reference.readthedocs.io/en/latest/docs/float




              I just thought of another way, using replace of the str class, that works because you're only replacing .0, so .5 won't effect,



              Only problem is that 1.00 won't work, it will output 10,



              But this is still a simple solution:



              a = 1.5
              print(str(a).replace('.0', ''))
              b = 1.0
              print(str(b).replace('.0', ''))


              Output:



              1.5
              1


              References:




              https://python-reference.readthedocs.io/en/latest/docs/str/replace.html



              https://python-reference.readthedocs.io/en/latest/docs/str







              share|improve this answer





























                6














                Use this function, is_integer is a function from the float class,



                You can just use this method to_int to use is_integer to check whether it is a integer (i.e 1.0) or a float (i.e 1.5),



                If it is a integer-like float, return int(a), otherwise just return it's original value,



                As you see, I am not using elif or else, just directly, because return only returns the first return's value:



                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


                References:




                https://python-reference.readthedocs.io/en/latest/docs/float/is_integer.html



                https://python-reference.readthedocs.io/en/latest/docs/float




                I just thought of another way, using replace of the str class, that works because you're only replacing .0, so .5 won't effect,



                Only problem is that 1.00 won't work, it will output 10,



                But this is still a simple solution:



                a = 1.5
                print(str(a).replace('.0', ''))
                b = 1.0
                print(str(b).replace('.0', ''))


                Output:



                1.5
                1


                References:




                https://python-reference.readthedocs.io/en/latest/docs/str/replace.html



                https://python-reference.readthedocs.io/en/latest/docs/str







                share|improve this answer



























                  6












                  6








                  6







                  Use this function, is_integer is a function from the float class,



                  You can just use this method to_int to use is_integer to check whether it is a integer (i.e 1.0) or a float (i.e 1.5),



                  If it is a integer-like float, return int(a), otherwise just return it's original value,



                  As you see, I am not using elif or else, just directly, because return only returns the first return's value:



                  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


                  References:




                  https://python-reference.readthedocs.io/en/latest/docs/float/is_integer.html



                  https://python-reference.readthedocs.io/en/latest/docs/float




                  I just thought of another way, using replace of the str class, that works because you're only replacing .0, so .5 won't effect,



                  Only problem is that 1.00 won't work, it will output 10,



                  But this is still a simple solution:



                  a = 1.5
                  print(str(a).replace('.0', ''))
                  b = 1.0
                  print(str(b).replace('.0', ''))


                  Output:



                  1.5
                  1


                  References:




                  https://python-reference.readthedocs.io/en/latest/docs/str/replace.html



                  https://python-reference.readthedocs.io/en/latest/docs/str







                  share|improve this answer















                  Use this function, is_integer is a function from the float class,



                  You can just use this method to_int to use is_integer to check whether it is a integer (i.e 1.0) or a float (i.e 1.5),



                  If it is a integer-like float, return int(a), otherwise just return it's original value,



                  As you see, I am not using elif or else, just directly, because return only returns the first return's value:



                  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


                  References:




                  https://python-reference.readthedocs.io/en/latest/docs/float/is_integer.html



                  https://python-reference.readthedocs.io/en/latest/docs/float




                  I just thought of another way, using replace of the str class, that works because you're only replacing .0, so .5 won't effect,



                  Only problem is that 1.00 won't work, it will output 10,



                  But this is still a simple solution:



                  a = 1.5
                  print(str(a).replace('.0', ''))
                  b = 1.0
                  print(str(b).replace('.0', ''))


                  Output:



                  1.5
                  1


                  References:




                  https://python-reference.readthedocs.io/en/latest/docs/str/replace.html



                  https://python-reference.readthedocs.io/en/latest/docs/str








                  share|improve this answer














                  share|improve this answer



                  share|improve this answer








                  edited 1 hour ago

























                  answered 18 hours ago









                  U9-ForwardU9-Forward

                  17.9k51743




                  17.9k51743





















                      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
                        14 hours ago






                      • 3





                        @M.Herzkamp you could have a union though.

                        – Baldrickk
                        14 hours ago











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

                        – Stefan Kostoski
                        13 hours 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
                        13 hours 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
                        13 hours 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
                        14 hours ago






                      • 3





                        @M.Herzkamp you could have a union though.

                        – Baldrickk
                        14 hours ago











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

                        – Stefan Kostoski
                        13 hours 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
                        13 hours 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
                        13 hours 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 15 hours 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
                        14 hours ago






                      • 3





                        @M.Herzkamp you could have a union though.

                        – Baldrickk
                        14 hours ago











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

                        – Stefan Kostoski
                        13 hours 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
                        13 hours 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
                        13 hours 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
                        14 hours ago






                      • 3





                        @M.Herzkamp you could have a union though.

                        – Baldrickk
                        14 hours ago











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

                        – Stefan Kostoski
                        13 hours 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
                        13 hours 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
                        13 hours 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
                      14 hours 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
                      14 hours ago




                      3




                      3





                      @M.Herzkamp you could have a union though.

                      – Baldrickk
                      14 hours ago





                      @M.Herzkamp you could have a union though.

                      – Baldrickk
                      14 hours ago













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

                      – Stefan Kostoski
                      13 hours ago





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

                      – Stefan Kostoski
                      13 hours 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
                      13 hours 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
                      13 hours 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
                      13 hours 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
                      13 hours ago











                      -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
                        15 hours ago






                      • 2





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

                        – Amit Joshi
                        13 hours ago











                      • Added some Python code (I think). I'd like to know why the downvote? It's a simple solution that works. No weird functions or other constructs required. I didn't think an explanation was necessary, as modulo counts as basic arithmetic. IMO every developer should know what it does or should have the ability to invest 10 seconds into typing "modulo" in to the all-knowing search engine whom I shall not name.

                        – SimonC
                        13 hours 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
                        12 hours ago






                      • 7





                        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
                        12 hours ago















                      -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
                        15 hours ago






                      • 2





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

                        – Amit Joshi
                        13 hours ago











                      • Added some Python code (I think). I'd like to know why the downvote? It's a simple solution that works. No weird functions or other constructs required. I didn't think an explanation was necessary, as modulo counts as basic arithmetic. IMO every developer should know what it does or should have the ability to invest 10 seconds into typing "modulo" in to the all-knowing search engine whom I shall not name.

                        – SimonC
                        13 hours 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
                        12 hours ago






                      • 7





                        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
                        12 hours ago













                      -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 13 hours ago

























                      answered 15 hours ago









                      SimonCSimonC

                      496621




                      496621







                      • 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
                        15 hours ago






                      • 2





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

                        – Amit Joshi
                        13 hours ago











                      • Added some Python code (I think). I'd like to know why the downvote? It's a simple solution that works. No weird functions or other constructs required. I didn't think an explanation was necessary, as modulo counts as basic arithmetic. IMO every developer should know what it does or should have the ability to invest 10 seconds into typing "modulo" in to the all-knowing search engine whom I shall not name.

                        – SimonC
                        13 hours 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
                        12 hours ago






                      • 7





                        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
                        12 hours ago












                      • 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
                        15 hours ago






                      • 2





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

                        – Amit Joshi
                        13 hours ago











                      • Added some Python code (I think). I'd like to know why the downvote? It's a simple solution that works. No weird functions or other constructs required. I didn't think an explanation was necessary, as modulo counts as basic arithmetic. IMO every developer should know what it does or should have the ability to invest 10 seconds into typing "modulo" in to the all-knowing search engine whom I shall not name.

                        – SimonC
                        13 hours 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
                        12 hours ago






                      • 7





                        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
                        12 hours ago







                      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
                      15 hours 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
                      15 hours ago




                      2




                      2





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

                      – Amit Joshi
                      13 hours ago





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

                      – Amit Joshi
                      13 hours ago













                      Added some Python code (I think). I'd like to know why the downvote? It's a simple solution that works. No weird functions or other constructs required. I didn't think an explanation was necessary, as modulo counts as basic arithmetic. IMO every developer should know what it does or should have the ability to invest 10 seconds into typing "modulo" in to the all-knowing search engine whom I shall not name.

                      – SimonC
                      13 hours ago






                      Added some Python code (I think). I'd like to know why the downvote? It's a simple solution that works. No weird functions or other constructs required. I didn't think an explanation was necessary, as modulo counts as basic arithmetic. IMO every developer should know what it does or should have the ability to invest 10 seconds into typing "modulo" in to the all-knowing search engine whom I shall not name.

                      – SimonC
                      13 hours 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
                      12 hours 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
                      12 hours ago




                      7




                      7





                      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
                      12 hours 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
                      12 hours ago










                      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

                      Reverse int within the 32-bit signed integer range: [−2^31, 2^31 − 1]Combining two 32-bit integers into one 64-bit integerDetermine if an int is within rangeLossy packing 32 bit integer to 16 bitComputing the square root of a 64-bit integerKeeping integer addition within boundsSafe multiplication of two 64-bit signed integersLeetcode 10: Regular Expression MatchingSigned integer-to-ascii x86_64 assembler macroReverse the digits of an Integer“Add two numbers given in reverse order from a linked list”

                      Category:Fedor von Bock Media in category "Fedor von Bock"Navigation menuUpload mediaISNI: 0000 0000 5511 3417VIAF ID: 24712551GND ID: 119294796Library of Congress authority ID: n96068363BnF ID: 12534305fSUDOC authorities ID: 034604189Open Library ID: OL338253ANKCR AUT ID: jn19990000869National Library of Israel ID: 000514068National Thesaurus for Author Names ID: 341574317ReasonatorScholiaStatistics

                      Kiel Indholdsfortegnelse Historie | Transport og færgeforbindelser | Sejlsport og anden sport | Kultur | Kendte personer fra Kiel | Noter | Litteratur | Eksterne henvisninger | Navigationsmenuwww.kiel.de54°19′31″N 10°8′26″Ø / 54.32528°N 10.14056°Ø / 54.32528; 10.14056Oberbürgermeister Dr. Ulf Kämpferwww.statistik-nord.deDen danske Stats StatistikKiels hjemmesiderrrWorldCat312794080n790547494030481-4