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?

How badly should I try to prevent a user from XSSing themselves?

Assassin's bullet with mercury

Can I ask the recruiters in my resume to put the reason why I am rejected?

90's TV series where a boy goes to another dimension through portal near power lines

Arrow those variables!

What to put in ESTA if staying in US for a few days before going on to Canada

How much of data wrangling is a data scientist's job?

Did Shadowfax go to Valinor?

How to draw the figure with four pentagons?

Doing something right before you need it - expression for this?

Stopping power of mountain vs road bike

Can a rocket refuel on Mars from water?

Why is it a bad idea to hire a hitman to eliminate most corrupt politicians?

Should I tell management that I intend to leave due to bad software development practices?

Is there a hemisphere-neutral way of specifying a season?

Infinite Abelian subgroup of infinite non Abelian group example

Etiquette around loan refinance - decision is going to cost first broker a lot of money

Why is consensus so controversial in Britain?

Do I have a twin with permutated remainders?

Famous Pre Reformation Christian Pastors (Non Catholic and Non Orthodox)

How to take photos in burst mode, without vibration?

Fully-Firstable Anagram Sets

Watching something be written to a file live with tail

Brothers & sisters



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;








17















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







  • 4





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

    – Barmar
    16 hours ago






  • 41





    Why would you want to do this, anyway?

    – Barmar
    16 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
    16 hours ago






  • 9





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

    – Lightness Races in Orbit
    14 hours ago

















17















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







  • 4





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

    – Barmar
    16 hours ago






  • 41





    Why would you want to do this, anyway?

    – Barmar
    16 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
    16 hours ago






  • 9





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

    – Lightness Races in Orbit
    14 hours ago













17












17








17


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









Raymond ShenRaymond Shen

10114




10114




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







  • 4





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

    – Barmar
    16 hours ago






  • 41





    Why would you want to do this, anyway?

    – Barmar
    16 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
    16 hours ago






  • 9





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

    – Lightness Races in Orbit
    14 hours ago












  • 3





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

    – DirtyBit
    16 hours ago







  • 4





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

    – Barmar
    16 hours ago






  • 41





    Why would you want to do this, anyway?

    – Barmar
    16 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
    16 hours ago






  • 9





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

    – Lightness Races in Orbit
    14 hours ago







3




3





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

– DirtyBit
16 hours ago






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

– DirtyBit
16 hours ago





4




4





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

– Barmar
16 hours ago





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

– Barmar
16 hours ago




41




41





Why would you want to do this, anyway?

– Barmar
16 hours ago





Why would you want to do this, anyway?

– Barmar
16 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
16 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
16 hours ago




9




9





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

– Lightness Races in Orbit
14 hours ago





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

– Lightness Races in Orbit
14 hours ago












6 Answers
6






active

oldest

votes


















54














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






  • 11





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

    – LegionMammal978
    4 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
    3 hours ago






  • 2





    @dan04 Even better: 1..is_integer()

    – Roman Odaisky
    3 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
    38 mins 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
      6 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.
      5 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
      4 hours ago


















    4














    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, 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





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






      • 3





        @M.Herzkamp you could have a union though.

        – Baldrickk
        12 hours ago











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

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


















      -1














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






      • 2





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

        – Amit Joshi
        11 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
        11 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
        11 hours ago






      • 6





        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
        10 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









      54














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






      • 11





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

        – LegionMammal978
        4 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
        3 hours ago






      • 2





        @dan04 Even better: 1..is_integer()

        – Roman Odaisky
        3 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
        38 mins ago















      54














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






      • 11





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

        – LegionMammal978
        4 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
        3 hours ago






      • 2





        @dan04 Even better: 1..is_integer()

        – Roman Odaisky
        3 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
        38 mins ago













      54












      54








      54







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









      Rakete1111

      35.2k1084119




      35.2k1084119










      answered 16 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
        6 hours ago






      • 11





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

        – LegionMammal978
        4 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
        3 hours ago






      • 2





        @dan04 Even better: 1..is_integer()

        – Roman Odaisky
        3 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
        38 mins 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
        6 hours ago






      • 11





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

        – LegionMammal978
        4 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
        3 hours ago






      • 2





        @dan04 Even better: 1..is_integer()

        – Roman Odaisky
        3 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
        38 mins 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
      6 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
      6 hours ago




      11




      11





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

      – LegionMammal978
      4 hours ago






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

      – LegionMammal978
      4 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
      3 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
      3 hours ago




      2




      2





      @dan04 Even better: 1..is_integer()

      – Roman Odaisky
      3 hours ago





      @dan04 Even better: 1..is_integer()

      – Roman Odaisky
      3 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
      38 mins 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
      38 mins 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 11 hours ago

























          answered 12 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
                6 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.
                5 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
                4 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
                6 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.
                5 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
                4 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 11 hours ago

























              answered 11 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
                6 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.
                5 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
                4 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
                6 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.
                5 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
                4 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
              6 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
              6 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.
              5 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.
              5 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
              4 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
              4 hours ago











              4














              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, 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





              share|improve this answer





























                4














                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, 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





                share|improve this answer



























                  4












                  4








                  4







                  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, 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





                  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, 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






                  share|improve this answer














                  share|improve this answer



                  share|improve this answer








                  edited 50 secs ago

























                  answered 16 hours ago









                  U9-ForwardU9-Forward

                  17.8k51743




                  17.8k51743





















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






                      • 3





                        @M.Herzkamp you could have a union though.

                        – Baldrickk
                        12 hours ago











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

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






                      • 3





                        @M.Herzkamp you could have a union though.

                        – Baldrickk
                        12 hours ago











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

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






                      • 3





                        @M.Herzkamp you could have a union though.

                        – Baldrickk
                        12 hours ago











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

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






                      • 3





                        @M.Herzkamp you could have a union though.

                        – Baldrickk
                        12 hours ago











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

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




                      3




                      3





                      @M.Herzkamp you could have a union though.

                      – Baldrickk
                      12 hours ago





                      @M.Herzkamp you could have a union though.

                      – Baldrickk
                      12 hours ago













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

                      – Stefan Kostoski
                      11 hours ago





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

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











                      -1














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






                      • 2





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

                        – Amit Joshi
                        11 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
                        11 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
                        11 hours ago






                      • 6





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















                      -1














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






                      • 2





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

                        – Amit Joshi
                        11 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
                        11 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
                        11 hours ago






                      • 6





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













                      -1












                      -1








                      -1







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

























                      answered 13 hours ago









                      SimonCSimonC

                      498621




                      498621







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






                      • 2





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

                        – Amit Joshi
                        11 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
                        11 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
                        11 hours ago






                      • 6





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






                      • 2





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

                        – Amit Joshi
                        11 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
                        11 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
                        11 hours ago






                      • 6





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




                      2




                      2





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

                      – Amit Joshi
                      11 hours ago





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

                      – Amit Joshi
                      11 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
                      11 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
                      11 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
                      11 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
                      11 hours ago




                      6




                      6





                      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
                      10 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
                      10 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

                      Jet Time Laivasto | Lähteet | Aiheesta muualla | NavigointivalikkoJet Time - The CompanyThe CompanyManagementJet Time aloittaa lauantaina Suomi-rekisterissä olevalla Boeing 737 -koneellaJettime Finland Fleet Details and HistoryJettime Fleet Details and HistoryRegional Jet OÜ takes over ATR production for SASJet Time Returns To Its Core BusinessYhtiön kotisivutlaajentamalla

                      Olympian arkeologinen museo Sisällysluettelo Historia ja rakennus | Kokoelmat | Lähteet | Aiheesta muualla | Navigointivalikko37°38′36″N, 21°37′46″EInfobox OKArchaeological Museum of Olympia: HistoryArchaeological Museum of Olympia: DescriptionΜουσείο Ιστορίας των Ολυμπιακών Αγώνων της Αρχαιότητας: ΙστορικόArchaeological Museum of Olympia

                      Äpy Sisällysluettelo Äpyt kautta historian | Esimerkkejä Äpy-huumorista | Katso myös | Kirjallisuutta | Aiheesta muualla | Navigointivalikkowww.äpy.fi