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?

Western buddy movie with a supernatural twist where a woman turns into an eagle at the end

Why 'in' operator is throwing error instead of logging false with string literal

prove that the matrix A is diagonalizable

UK: Is there precedent for the governments e-petition site changing the direction of a government decision?

Do I have a twin with permutated remainders?

How to model explosives?

How do I write bicross product symbols in latex?

What is going on with Captain Marvel's blood colour?

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

Can one be a co-translator of a book, if he does not know the language that the book is translated into?

How to draw the figure with four pentagons?

Has there ever been an airliner design involving reducing generator load by installing solar panels?

How do conventional missiles fly?

Were any external disk drives stacked vertically?

Could gravitational lensing be used to protect a spaceship from a laser?

Alternative to sending password over mail?

Does a druid starting with a bow start with no arrows?

How can I tell someone that I want to be his or her friend?

What exploit are these user agents trying to use?

Can a rocket refuel on Mars from water?

Withdrawals from HSA

Forgetting the musical notes while performing in concert

Why doesn't H₄O²⁺ exist?

Can a virus destroy the BIOS of a modern computer?



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;








16















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






  • 36





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

















16















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






  • 36





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













16












16








16


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

9614




9614




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






  • 36





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






  • 36





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




36




36





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





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

– Lightness Races in Orbit
11 hours ago












6 Answers
6






active

oldest

votes


















52














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
    3 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
    1 hour ago






  • 2





    @dan04 Even better: 1..is_integer()

    – Roman Odaisky
    1 hour ago


















12














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











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

        – Stefan Kostoski
        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
        8 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
        8 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
        10 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
        8 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
        8 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









      52














      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
        3 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
        1 hour ago






      • 2





        @dan04 Even better: 1..is_integer()

        – Roman Odaisky
        1 hour ago















      52














      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
        3 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
        1 hour ago






      • 2





        @dan04 Even better: 1..is_integer()

        – Roman Odaisky
        1 hour ago













      52












      52








      52







      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 4 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
        3 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
        1 hour 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
        3 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
        1 hour 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
      3 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
      3 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
      1 hour 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
      1 hour 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













      12














      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





























        12














        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



























          12












          12








          12







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

























          answered 9 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
                3 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.
                2 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
                2 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
                3 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.
                2 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
                2 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 8 hours ago

























              answered 8 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
                3 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.
                2 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
                2 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
                3 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.
                2 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
                2 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
              3 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
              3 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.
              2 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.
              2 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
              2 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
              2 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
                        9 hours ago











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

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











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

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











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

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











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

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





                      @M.Herzkamp you could have a union though.

                      – Baldrickk
                      9 hours ago













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

                      – Stefan Kostoski
                      9 hours ago





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

                      – Stefan Kostoski
                      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
                      8 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
                      8 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
                      8 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
                      8 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
                        10 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
                        8 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
                        8 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
                        10 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
                        8 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
                        8 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 10 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
                        10 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
                        8 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
                        8 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
                        10 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
                        8 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
                        8 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
                      10 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
                      10 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
                      8 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
                      8 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
                      8 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
                      8 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

                      Ружовы пелікан Змест Знешні выгляд | Пашырэнне | Асаблівасці біялогіі | Літаратура | НавігацыяДагледжаная версіяправерана1 зменаДагледжаная версіяправерана1 змена/ 22697590 Сістэматыкана ВіківідахВыявына Вікісховішчы174693363011049382

                      ValueError: Error when checking input: expected conv2d_13_input to have shape (3, 150, 150) but got array with shape (150, 150, 3)2019 Community Moderator ElectionError when checking : expected dense_1_input to have shape (None, 5) but got array with shape (200, 1)Error 'Expected 2D array, got 1D array instead:'ValueError: Error when checking input: expected lstm_41_input to have 3 dimensions, but got array with shape (40000,100)ValueError: Error when checking target: expected dense_1 to have shape (7,) but got array with shape (1,)ValueError: Error when checking target: expected dense_2 to have shape (1,) but got array with shape (0,)Keras exception: ValueError: Error when checking input: expected conv2d_1_input to have shape (150, 150, 3) but got array with shape (256, 256, 3)Steps taking too long to completewhen checking input: expected dense_1_input to have shape (13328,) but got array with shape (317,)ValueError: Error when checking target: expected dense_3 to have shape (None, 1) but got array with shape (7715, 40000)Keras exception: Error when checking input: expected dense_input to have shape (2,) but got array with shape (1,)

                      Illegal assignment from SObject to ContactFetching String, Id from Map - Illegal Assignment Id to Field / ObjectError: Compile Error: Illegal assignment from String to BooleanError: List has no rows for assignment to SObjectError on Test Class - System.QueryException: List has no rows for assignment to SObjectRemote action problemDML requires SObject or SObject list type error“Illegal assignment from List to List”Test Class Fail: Batch Class: System.QueryException: List has no rows for assignment to SObjectMapping to a user'List has no rows for assignment to SObject' Mystery