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





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








  • 4





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

    – Barmar
    14 hours ago






  • 38





    Why would you want to do this, anyway?

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






  • 8





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

    – Lightness Races in Orbit
    12 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
    14 hours ago








  • 4





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

    – Barmar
    14 hours ago






  • 38





    Why would you want to do this, anyway?

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






  • 8





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

    – Lightness Races in Orbit
    12 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 7 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 14 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
    14 hours ago








  • 4





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

    – Barmar
    14 hours ago






  • 38





    Why would you want to do this, anyway?

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






  • 8





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

    – Lightness Races in Orbit
    12 hours ago














  • 3





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

    – DirtyBit
    14 hours ago








  • 4





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

    – Barmar
    14 hours ago






  • 38





    Why would you want to do this, anyway?

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






  • 8





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

    – Lightness Races in Orbit
    12 hours ago








3




3





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

– DirtyBit
14 hours ago







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

– DirtyBit
14 hours ago






4




4





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

– Barmar
14 hours ago





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

– Barmar
14 hours ago




38




38





Why would you want to do this, anyway?

– Barmar
14 hours ago





Why would you want to do this, anyway?

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




8




8





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

– Lightness Races in Orbit
12 hours ago





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

– Lightness Races in Orbit
12 hours ago












6 Answers
6






active

oldest

votes


















53














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





















  • 5





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






  • 9





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

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






  • 2





    @dan04 Even better: 1..is_integer()

    – Roman Odaisky
    1 hour ago



















13














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





















    • 1





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



















    4














    Use this function:



    def to_int(a):
    if a.is_integer():
    return int(a)
    return a
    print(to_int(1.5))
    print(to_int(1.0))


    Output:



    1.5
    1





    share|improve this answer































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






      • 3





        @M.Herzkamp you could have a union though.

        – Baldrickk
        10 hours ago











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

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






      • 2





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

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








      • 3





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






      • 5





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









      53














      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





















      • 5





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






      • 9





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

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






      • 2





        @dan04 Even better: 1..is_integer()

        – Roman Odaisky
        1 hour ago
















      53














      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





















      • 5





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






      • 9





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

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






      • 2





        @dan04 Even better: 1..is_integer()

        – Roman Odaisky
        1 hour ago














      53












      53








      53







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









      Rakete1111

      35.2k1084119




      35.2k1084119










      answered 14 hours ago









      DirtyBitDirtyBit

      12.1k21943




      12.1k21943








      • 5





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






      • 9





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

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






      • 2





        @dan04 Even better: 1..is_integer()

        – Roman Odaisky
        1 hour ago














      • 5





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






      • 9





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

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






      • 2





        @dan04 Even better: 1..is_integer()

        – Roman Odaisky
        1 hour ago








      5




      5





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




      9




      9





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

      – LegionMammal978
      2 hours ago







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

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




      2




      2





      @dan04 Even better: 1..is_integer()

      – Roman Odaisky
      1 hour ago





      @dan04 Even better: 1..is_integer()

      – Roman Odaisky
      1 hour ago













      13














      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






























        13














        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




























          13












          13








          13







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

























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





















              • 1





                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
                4 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.
                3 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
                3 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





















              • 1





                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
                4 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.
                3 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
                3 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 9 hours ago

























              answered 9 hours ago









              Silvio MayoloSilvio Mayolo

              14.8k22554




              14.8k22554








              • 1





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














              • 1





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








              1




              1





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











              4














              Use this function:



              def to_int(a):
              if a.is_integer():
              return int(a)
              return a
              print(to_int(1.5))
              print(to_int(1.0))


              Output:



              1.5
              1





              share|improve this answer




























                4














                Use this function:



                def to_int(a):
                if a.is_integer():
                return int(a)
                return a
                print(to_int(1.5))
                print(to_int(1.0))


                Output:



                1.5
                1





                share|improve this answer


























                  4












                  4








                  4







                  Use this function:



                  def to_int(a):
                  if a.is_integer():
                  return int(a)
                  return a
                  print(to_int(1.5))
                  print(to_int(1.0))


                  Output:



                  1.5
                  1





                  share|improve this answer













                  Use this function:



                  def to_int(a):
                  if a.is_integer():
                  return int(a)
                  return a
                  print(to_int(1.5))
                  print(to_int(1.0))


                  Output:



                  1.5
                  1






                  share|improve this answer












                  share|improve this answer



                  share|improve this answer










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






                      • 3





                        @M.Herzkamp you could have a union though.

                        – Baldrickk
                        10 hours ago











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

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






                      • 3





                        @M.Herzkamp you could have a union though.

                        – Baldrickk
                        10 hours ago











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

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






                      • 3





                        @M.Herzkamp you could have a union though.

                        – Baldrickk
                        10 hours ago











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

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






                      • 3





                        @M.Herzkamp you could have a union though.

                        – Baldrickk
                        10 hours ago











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

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




                      3




                      3





                      @M.Herzkamp you could have a union though.

                      – Baldrickk
                      10 hours ago





                      @M.Herzkamp you could have a union though.

                      – Baldrickk
                      10 hours ago













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

                      – Stefan Kostoski
                      10 hours ago





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

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






                      • 2





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

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








                      • 3





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






                      • 5





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






                      • 2





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

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








                      • 3





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






                      • 5





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

























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






                      • 2





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

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








                      • 3





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






                      • 5





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






                      • 2





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

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








                      • 3





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






                      • 5





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




                      2




                      2





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

                      – Amit Joshi
                      9 hours ago





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

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






                      3




                      3





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




                      5




                      5





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

                      Callistus I

                      Tabula Rosettana

                      How to label and detect the document text images