Python: return float 1.0 as int 1 but float 1.5 as float 1.5Calling an external command in PythonWhat are metaclasses in Python?Finding the index of an item given a list containing it in PythonHow can I safely create a nested directory in Python?How do I check if a string is a number (float)?How do I parse a string to a float or int in Python?Does Python have a ternary conditional operator?Does Python have a string 'contains' substring method?Catch multiple exceptions in one line (except block)Why is “1000000000000000 in range(1000000000000001)” so fast in Python 3?
What's the point of deactivating Num Lock on login screens?
If a Gelatinous Cube takes up the entire space of a Pit Trap, what happens when a creature falls into the trap but succeeds on the saving throw?
What is the word for reserving something for yourself before others do?
Why does Arabsat 6A need a Falcon Heavy to launch
Neighboring nodes in the network
How to say in German "enjoying home comforts"
Why is consensus so controversial in Britain?
AES: Why is it a good practice to use only the first 16bytes of a hash for encryption?
How can I make my BBEG immortal short of making them a Lich or Vampire?
Infinite Abelian subgroup of infinite non Abelian group example
Can I use a neutral wire from another outlet to repair a broken neutral?
If human space travel is limited by the G force vulnerability, is there a way to counter G forces?
Is it inappropriate for a student to attend their mentor's dissertation defense?
Why can't we play rap on piano?
How do conventional missiles fly?
Why doesn't H₄O²⁺ exist?
Where does SFDX store details about scratch orgs?
Is it legal for company to use my work email to pretend I still work there?
I'm flying to France today and my passport expires in less than 2 months
Can a rocket refuel on Mars from water?
Blender 2.8 I can't see vertices, edges or faces in edit mode
Watching something be written to a file live with tail
Why does Kotter return in Welcome Back Kotter
How do I write bicross product symbols in latex?
Python: return float 1.0 as int 1 but float 1.5 as float 1.5
Calling an external command in PythonWhat are metaclasses in Python?Finding the index of an item given a list containing it in PythonHow can I safely create a nested directory in Python?How do I check if a string is a number (float)?How do I parse a string to a float or int in Python?Does Python have a ternary conditional operator?Does Python have a string 'contains' substring method?Catch multiple exceptions in one line (except block)Why is “1000000000000000 in range(1000000000000001)” so fast in Python 3?
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty height:90px;width:728px;box-sizing:border-box;
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
New contributor
|
show 6 more comments
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
New contributor
3
one way could be to check the float usingis_integer()
if that passes, convert it toint
?
– DirtyBit
18 hours ago
4
Floats are approximations,1.0
could actually be1.00000000000001
or0.999999999999
.
– Barmar
18 hours ago
42
Why would you want to do this, anyway?
– Barmar
18 hours ago
2
Note that because of duck typing, this passage you want to achieve is probably out of place or useless, depending on context.
– Federico S
18 hours ago
9
Please specify your exact requirements in words/rules rather than just with a single example!
– Lightness Races in Orbit
15 hours ago
|
show 6 more comments
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
New contributor
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
python
New contributor
New contributor
edited 11 hours ago
DirtyBit
12.1k21943
12.1k21943
New contributor
asked 18 hours ago
Raymond ShenRaymond Shen
10614
10614
New contributor
New contributor
3
one way could be to check the float usingis_integer()
if that passes, convert it toint
?
– DirtyBit
18 hours ago
4
Floats are approximations,1.0
could actually be1.00000000000001
or0.999999999999
.
– Barmar
18 hours ago
42
Why would you want to do this, anyway?
– Barmar
18 hours ago
2
Note that because of duck typing, this passage you want to achieve is probably out of place or useless, depending on context.
– Federico S
18 hours ago
9
Please specify your exact requirements in words/rules rather than just with a single example!
– Lightness Races in Orbit
15 hours ago
|
show 6 more comments
3
one way could be to check the float usingis_integer()
if that passes, convert it toint
?
– DirtyBit
18 hours ago
4
Floats are approximations,1.0
could actually be1.00000000000001
or0.999999999999
.
– Barmar
18 hours ago
42
Why would you want to do this, anyway?
– Barmar
18 hours ago
2
Note that because of duck typing, this passage you want to achieve is probably out of place or useless, depending on context.
– Federico S
18 hours ago
9
Please specify your exact requirements in words/rules rather than just with a single example!
– Lightness Races in Orbit
15 hours ago
3
3
one way could be to check the float using
is_integer()
if that passes, convert it to int
?– DirtyBit
18 hours ago
one way could be to check the float using
is_integer()
if that passes, convert it to int
?– DirtyBit
18 hours ago
4
4
Floats are approximations,
1.0
could actually be 1.00000000000001
or 0.999999999999
.– Barmar
18 hours ago
Floats are approximations,
1.0
could actually be 1.00000000000001
or 0.999999999999
.– Barmar
18 hours ago
42
42
Why would you want to do this, anyway?
– Barmar
18 hours ago
Why would you want to do this, anyway?
– Barmar
18 hours ago
2
2
Note that because of duck typing, this passage you want to achieve is probably out of place or useless, depending on context.
– Federico S
18 hours ago
Note that because of duck typing, this passage you want to achieve is probably out of place or useless, depending on context.
– Federico S
18 hours ago
9
9
Please specify your exact requirements in words/rules rather than just with a single example!
– Lightness Races in Orbit
15 hours ago
Please specify your exact requirements in words/rules rather than just with a single example!
– Lightness Races in Orbit
15 hours ago
|
show 6 more comments
6 Answers
6
active
oldest
votes
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))
6
If anyone is curious about about the limits of is_integer() and how far away from 1.0 a floating point number can be and still be considered an integer, I wrote a short script to find the limit. It's a very small number, much more precision than I have ever needed for anything. (1.0 + 1.1102230246251566636831481088739149080825883254353483864385054857848444953560829162597656251e-16).is_integer() returns False, but (1.0 + 1.1102230246251566636831481088739149080825883254353483864385054857848444953560829162597656250e-16).is_integer() returns True.
– Josh Davis
7 hours ago
11
@JoshDavis That's just about rounding to1.0
vs.1.0 + sys.float_info.epsilon
.
– LegionMammal978
6 hours ago
Hey, I didn't know you could call a method directly on a float literal. I see why it tokenizes that way, with the first dot as a decimal point and the second dot as the attribute operator, but it looks so weird at first.
– dan04
5 hours ago
2
@dan04 Even better:1..is_integer()
– Roman Odaisky
5 hours ago
1
@RomanOdaisky Lmao. I both hate and love language quirks like this. On the one hand they produce cryptic code, but on the other hand they make for great "how well do you know this language" quizzes.
– flakes
2 hours ago
add a comment |
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'
add a comment |
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.
2
While most floating point values are approximations, there are many integers that can be represented exactly. A 64-bit IEEE 754 floating point number (as used in Python and other languages) can represent exactly any signed integer that fits in 53 bits or less. Such integers can be converted 1 to 1 between a 64-bit float and 64-bit integer assuming the integer value could be represented with as little as 53 bits. Addition, subtraction, and multiplication that stays within 53-bits of integer space should yield identical results per IEEE 754 spec.
– penguin359
8 hours ago
1
@penguin359 While I agree that integers can be represented exactly in floating point, if you're in the situation that OP is in, you need to ask yourself how close to an integer is "close enough" for your purpose. Is1.0 + 1e-16
"close enough"? Is1.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 consider1.0 + 2e-16
"not an integer" while saying1.0 + 1e-16
is one. -- Having an explicit epsilon (versus the implicit one from IEEE 754) makes your desires clearer.
– R.M.
6 hours ago
A comment seeming best at this answer: Setting an epsilon works as in the example provided works fine. Alternatively, especially if dealing with cents (currencies in general), I found it more useful to change from Python's default of binary representation to decimal one, as provided by module decimal (docs.python.org/3.7/library/decimal.html). The difference, for example in a loop iterating from -1 to +1 in increments of 0.1 is either passing very close to 0, or right at 0.0 -- without need for an epsilon set (how would you deal with -1.3877787807814457e-16 currency units?).
– Buttonwood
6 hours ago
add a comment |
Use this function, is_integer
is a function from the float
class,
You can just use this method to_int
to use is_integer
to check whether it is a integer (i.e 1.0
) or a float (i.e 1.5
),
If it is a integer-like float, return int(a)
, otherwise just return it's original value,
As you see, I am not using elif
or else
, just directly, because return
only return
s the first return
's value:
def to_int(a):
if a.is_integer():
return int(a)
return a
print(to_int(1.5))
print(to_int(1.0))
Output:
1.5
1
References:
https://python-reference.readthedocs.io/en/latest/docs/float/is_integer.html
https://python-reference.readthedocs.io/en/latest/docs/float
I just thought of another way, using replace
of the str
class, that works because you're only replacing .0
, so .5
won't effect,
Only problem is that 1.00
won't work, it will output 10
,
But this is still a simple solution:
a = 1.5
print(str(a).replace('.0', ''))
b = 1.0
print(str(b).replace('.0', ''))
Output:
1.5
1
References:
https://python-reference.readthedocs.io/en/latest/docs/str/replace.html
https://python-reference.readthedocs.io/en/latest/docs/str
add a comment |
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.
New contributor
1
The question was to convert a float to int whenever the float in question has an integer value. AFAIK this is not possible in C++, because you cannot return different values from a function.
– M.Herzkamp
14 hours ago
3
@M.Herzkamp you could have aunion
though.
– Baldrickk
14 hours ago
And also you could set another integer variable and save the float there if the condition above is met
– Stefan Kostoski
13 hours ago
The digression on C++ isn't really relevant. You can do the same thing in Python:foo = lambda x: int(x) if int(x) == x else x
. (Or in Python 3.8, to avoid the duplicate call toint
,lambda x: y if (y:=int(x)) == x else x
.
– chepner
13 hours ago
@chepner I triedfoo = lambda x: int(x) if int(x) == x else x
the very moment I wrote the answer above, for some reason it did not work for me in 3.6. Any clue?
– DirtyBit
13 hours ago
|
show 1 more comment
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)
2
I'm sorry but that is not a valid Python structure, would you please have it a valid Python format or allow me to edit it for you?
– DirtyBit
15 hours ago
2
As he mentioned, this is simply a logic. Not a working code. This should be fine IMO.
– Amit Joshi
13 hours ago
Added some Python code (I think). I'd like to know why the downvote? It's a simple solution that works. No weird functions or other constructs required. I didn't think an explanation was necessary, as modulo counts as basic arithmetic. IMO every developer should know what it does or should have the ability to invest 10 seconds into typing "modulo" in to the all-knowing search engine whom I shall not name.
– SimonC
13 hours ago
4
And readers should also google why it isn't possible to usereturn
outside of a function, or what the difference between==
and=
is?
– Eric Duminil
12 hours ago
7
To avoid downvotes, you should either try to answer questions for languages you're familiar with or at the very least try to run your code before posting.
– Eric Duminil
12 hours ago
add a comment |
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.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
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))
6
If anyone is curious about about the limits of is_integer() and how far away from 1.0 a floating point number can be and still be considered an integer, I wrote a short script to find the limit. It's a very small number, much more precision than I have ever needed for anything. (1.0 + 1.1102230246251566636831481088739149080825883254353483864385054857848444953560829162597656251e-16).is_integer() returns False, but (1.0 + 1.1102230246251566636831481088739149080825883254353483864385054857848444953560829162597656250e-16).is_integer() returns True.
– Josh Davis
7 hours ago
11
@JoshDavis That's just about rounding to1.0
vs.1.0 + sys.float_info.epsilon
.
– LegionMammal978
6 hours ago
Hey, I didn't know you could call a method directly on a float literal. I see why it tokenizes that way, with the first dot as a decimal point and the second dot as the attribute operator, but it looks so weird at first.
– dan04
5 hours ago
2
@dan04 Even better:1..is_integer()
– Roman Odaisky
5 hours ago
1
@RomanOdaisky Lmao. I both hate and love language quirks like this. On the one hand they produce cryptic code, but on the other hand they make for great "how well do you know this language" quizzes.
– flakes
2 hours ago
add a comment |
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))
6
If anyone is curious about about the limits of is_integer() and how far away from 1.0 a floating point number can be and still be considered an integer, I wrote a short script to find the limit. It's a very small number, much more precision than I have ever needed for anything. (1.0 + 1.1102230246251566636831481088739149080825883254353483864385054857848444953560829162597656251e-16).is_integer() returns False, but (1.0 + 1.1102230246251566636831481088739149080825883254353483864385054857848444953560829162597656250e-16).is_integer() returns True.
– Josh Davis
7 hours ago
11
@JoshDavis That's just about rounding to1.0
vs.1.0 + sys.float_info.epsilon
.
– LegionMammal978
6 hours ago
Hey, I didn't know you could call a method directly on a float literal. I see why it tokenizes that way, with the first dot as a decimal point and the second dot as the attribute operator, but it looks so weird at first.
– dan04
5 hours ago
2
@dan04 Even better:1..is_integer()
– Roman Odaisky
5 hours ago
1
@RomanOdaisky Lmao. I both hate and love language quirks like this. On the one hand they produce cryptic code, but on the other hand they make for great "how well do you know this language" quizzes.
– flakes
2 hours ago
add a comment |
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))
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))
edited 8 hours ago
Rakete1111
35.2k1084119
35.2k1084119
answered 18 hours ago
DirtyBitDirtyBit
12.1k21943
12.1k21943
6
If anyone is curious about about the limits of is_integer() and how far away from 1.0 a floating point number can be and still be considered an integer, I wrote a short script to find the limit. It's a very small number, much more precision than I have ever needed for anything. (1.0 + 1.1102230246251566636831481088739149080825883254353483864385054857848444953560829162597656251e-16).is_integer() returns False, but (1.0 + 1.1102230246251566636831481088739149080825883254353483864385054857848444953560829162597656250e-16).is_integer() returns True.
– Josh Davis
7 hours ago
11
@JoshDavis That's just about rounding to1.0
vs.1.0 + sys.float_info.epsilon
.
– LegionMammal978
6 hours ago
Hey, I didn't know you could call a method directly on a float literal. I see why it tokenizes that way, with the first dot as a decimal point and the second dot as the attribute operator, but it looks so weird at first.
– dan04
5 hours ago
2
@dan04 Even better:1..is_integer()
– Roman Odaisky
5 hours ago
1
@RomanOdaisky Lmao. I both hate and love language quirks like this. On the one hand they produce cryptic code, but on the other hand they make for great "how well do you know this language" quizzes.
– flakes
2 hours ago
add a comment |
6
If anyone is curious about about the limits of is_integer() and how far away from 1.0 a floating point number can be and still be considered an integer, I wrote a short script to find the limit. It's a very small number, much more precision than I have ever needed for anything. (1.0 + 1.1102230246251566636831481088739149080825883254353483864385054857848444953560829162597656251e-16).is_integer() returns False, but (1.0 + 1.1102230246251566636831481088739149080825883254353483864385054857848444953560829162597656250e-16).is_integer() returns True.
– Josh Davis
7 hours ago
11
@JoshDavis That's just about rounding to1.0
vs.1.0 + sys.float_info.epsilon
.
– LegionMammal978
6 hours ago
Hey, I didn't know you could call a method directly on a float literal. I see why it tokenizes that way, with the first dot as a decimal point and the second dot as the attribute operator, but it looks so weird at first.
– dan04
5 hours ago
2
@dan04 Even better:1..is_integer()
– Roman Odaisky
5 hours ago
1
@RomanOdaisky Lmao. I both hate and love language quirks like this. On the one hand they produce cryptic code, but on the other hand they make for great "how well do you know this language" quizzes.
– flakes
2 hours ago
6
6
If anyone is curious about about the limits of is_integer() and how far away from 1.0 a floating point number can be and still be considered an integer, I wrote a short script to find the limit. It's a very small number, much more precision than I have ever needed for anything. (1.0 + 1.1102230246251566636831481088739149080825883254353483864385054857848444953560829162597656251e-16).is_integer() returns False, but (1.0 + 1.1102230246251566636831481088739149080825883254353483864385054857848444953560829162597656250e-16).is_integer() returns True.
– Josh Davis
7 hours ago
If anyone is curious about about the limits of is_integer() and how far away from 1.0 a floating point number can be and still be considered an integer, I wrote a short script to find the limit. It's a very small number, much more precision than I have ever needed for anything. (1.0 + 1.1102230246251566636831481088739149080825883254353483864385054857848444953560829162597656251e-16).is_integer() returns False, but (1.0 + 1.1102230246251566636831481088739149080825883254353483864385054857848444953560829162597656250e-16).is_integer() returns True.
– Josh Davis
7 hours ago
11
11
@JoshDavis That's just about rounding to
1.0
vs. 1.0 + sys.float_info.epsilon
.– LegionMammal978
6 hours ago
@JoshDavis That's just about rounding to
1.0
vs. 1.0 + sys.float_info.epsilon
.– LegionMammal978
6 hours ago
Hey, I didn't know you could call a method directly on a float literal. I see why it tokenizes that way, with the first dot as a decimal point and the second dot as the attribute operator, but it looks so weird at first.
– dan04
5 hours ago
Hey, I didn't know you could call a method directly on a float literal. I see why it tokenizes that way, with the first dot as a decimal point and the second dot as the attribute operator, but it looks so weird at first.
– dan04
5 hours ago
2
2
@dan04 Even better:
1..is_integer()
– Roman Odaisky
5 hours ago
@dan04 Even better:
1..is_integer()
– Roman Odaisky
5 hours ago
1
1
@RomanOdaisky Lmao. I both hate and love language quirks like this. On the one hand they produce cryptic code, but on the other hand they make for great "how well do you know this language" quizzes.
– flakes
2 hours ago
@RomanOdaisky Lmao. I both hate and love language quirks like this. On the one hand they produce cryptic code, but on the other hand they make for great "how well do you know this language" quizzes.
– flakes
2 hours ago
add a comment |
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'
add a comment |
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'
add a comment |
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'
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'
edited 13 hours ago
answered 14 hours ago
Eric DuminilEric Duminil
40.8k63372
40.8k63372
add a comment |
add a comment |
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.
2
While most floating point values are approximations, there are many integers that can be represented exactly. A 64-bit IEEE 754 floating point number (as used in Python and other languages) can represent exactly any signed integer that fits in 53 bits or less. Such integers can be converted 1 to 1 between a 64-bit float and 64-bit integer assuming the integer value could be represented with as little as 53 bits. Addition, subtraction, and multiplication that stays within 53-bits of integer space should yield identical results per IEEE 754 spec.
– penguin359
8 hours ago
1
@penguin359 While I agree that integers can be represented exactly in floating point, if you're in the situation that OP is in, you need to ask yourself how close to an integer is "close enough" for your purpose. Is1.0 + 1e-16
"close enough"? Is1.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 consider1.0 + 2e-16
"not an integer" while saying1.0 + 1e-16
is one. -- Having an explicit epsilon (versus the implicit one from IEEE 754) makes your desires clearer.
– R.M.
6 hours ago
A comment seeming best at this answer: Setting an epsilon works as in the example provided works fine. Alternatively, especially if dealing with cents (currencies in general), I found it more useful to change from Python's default of binary representation to decimal one, as provided by module decimal (docs.python.org/3.7/library/decimal.html). The difference, for example in a loop iterating from -1 to +1 in increments of 0.1 is either passing very close to 0, or right at 0.0 -- without need for an epsilon set (how would you deal with -1.3877787807814457e-16 currency units?).
– Buttonwood
6 hours ago
add a comment |
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.
2
While most floating point values are approximations, there are many integers that can be represented exactly. A 64-bit IEEE 754 floating point number (as used in Python and other languages) can represent exactly any signed integer that fits in 53 bits or less. Such integers can be converted 1 to 1 between a 64-bit float and 64-bit integer assuming the integer value could be represented with as little as 53 bits. Addition, subtraction, and multiplication that stays within 53-bits of integer space should yield identical results per IEEE 754 spec.
– penguin359
8 hours ago
1
@penguin359 While I agree that integers can be represented exactly in floating point, if you're in the situation that OP is in, you need to ask yourself how close to an integer is "close enough" for your purpose. Is1.0 + 1e-16
"close enough"? Is1.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 consider1.0 + 2e-16
"not an integer" while saying1.0 + 1e-16
is one. -- Having an explicit epsilon (versus the implicit one from IEEE 754) makes your desires clearer.
– R.M.
6 hours ago
A comment seeming best at this answer: Setting an epsilon works as in the example provided works fine. Alternatively, especially if dealing with cents (currencies in general), I found it more useful to change from Python's default of binary representation to decimal one, as provided by module decimal (docs.python.org/3.7/library/decimal.html). The difference, for example in a loop iterating from -1 to +1 in increments of 0.1 is either passing very close to 0, or right at 0.0 -- without need for an epsilon set (how would you deal with -1.3877787807814457e-16 currency units?).
– Buttonwood
6 hours ago
add a comment |
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.
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.
edited 12 hours ago
answered 12 hours ago
Silvio MayoloSilvio Mayolo
14.8k22554
14.8k22554
2
While most floating point values are approximations, there are many integers that can be represented exactly. A 64-bit IEEE 754 floating point number (as used in Python and other languages) can represent exactly any signed integer that fits in 53 bits or less. Such integers can be converted 1 to 1 between a 64-bit float and 64-bit integer assuming the integer value could be represented with as little as 53 bits. Addition, subtraction, and multiplication that stays within 53-bits of integer space should yield identical results per IEEE 754 spec.
– penguin359
8 hours ago
1
@penguin359 While I agree that integers can be represented exactly in floating point, if you're in the situation that OP is in, you need to ask yourself how close to an integer is "close enough" for your purpose. Is1.0 + 1e-16
"close enough"? Is1.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 consider1.0 + 2e-16
"not an integer" while saying1.0 + 1e-16
is one. -- Having an explicit epsilon (versus the implicit one from IEEE 754) makes your desires clearer.
– R.M.
6 hours ago
A comment seeming best at this answer: Setting an epsilon works as in the example provided works fine. Alternatively, especially if dealing with cents (currencies in general), I found it more useful to change from Python's default of binary representation to decimal one, as provided by module decimal (docs.python.org/3.7/library/decimal.html). The difference, for example in a loop iterating from -1 to +1 in increments of 0.1 is either passing very close to 0, or right at 0.0 -- without need for an epsilon set (how would you deal with -1.3877787807814457e-16 currency units?).
– Buttonwood
6 hours ago
add a comment |
2
While most floating point values are approximations, there are many integers that can be represented exactly. A 64-bit IEEE 754 floating point number (as used in Python and other languages) can represent exactly any signed integer that fits in 53 bits or less. Such integers can be converted 1 to 1 between a 64-bit float and 64-bit integer assuming the integer value could be represented with as little as 53 bits. Addition, subtraction, and multiplication that stays within 53-bits of integer space should yield identical results per IEEE 754 spec.
– penguin359
8 hours ago
1
@penguin359 While I agree that integers can be represented exactly in floating point, if you're in the situation that OP is in, you need to ask yourself how close to an integer is "close enough" for your purpose. Is1.0 + 1e-16
"close enough"? Is1.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 consider1.0 + 2e-16
"not an integer" while saying1.0 + 1e-16
is one. -- Having an explicit epsilon (versus the implicit one from IEEE 754) makes your desires clearer.
– R.M.
6 hours ago
A comment seeming best at this answer: Setting an epsilon works as in the example provided works fine. Alternatively, especially if dealing with cents (currencies in general), I found it more useful to change from Python's default of binary representation to decimal one, as provided by module decimal (docs.python.org/3.7/library/decimal.html). The difference, for example in a loop iterating from -1 to +1 in increments of 0.1 is either passing very close to 0, or right at 0.0 -- without need for an epsilon set (how would you deal with -1.3877787807814457e-16 currency units?).
– Buttonwood
6 hours ago
2
2
While most floating point values are approximations, there are many integers that can be represented exactly. A 64-bit IEEE 754 floating point number (as used in Python and other languages) can represent exactly any signed integer that fits in 53 bits or less. Such integers can be converted 1 to 1 between a 64-bit float and 64-bit integer assuming the integer value could be represented with as little as 53 bits. Addition, subtraction, and multiplication that stays within 53-bits of integer space should yield identical results per IEEE 754 spec.
– penguin359
8 hours ago
While most floating point values are approximations, there are many integers that can be represented exactly. A 64-bit IEEE 754 floating point number (as used in Python and other languages) can represent exactly any signed integer that fits in 53 bits or less. Such integers can be converted 1 to 1 between a 64-bit float and 64-bit integer assuming the integer value could be represented with as little as 53 bits. Addition, subtraction, and multiplication that stays within 53-bits of integer space should yield identical results per IEEE 754 spec.
– penguin359
8 hours ago
1
1
@penguin359 While I agree that integers can be represented exactly in floating point, if you're in the situation that OP is in, you need to ask yourself how close to an integer is "close enough" for your purpose. Is
1.0 + 1e-16
"close enough"? Is 1.0 + 2e-16
? It's an important question, as IEEE 754-based "is integer" methods will treat them differently, and you may or may not want to consider 1.0 + 2e-16
"not an integer" while saying 1.0 + 1e-16
is one. -- Having an explicit epsilon (versus the implicit one from IEEE 754) makes your desires clearer.– R.M.
6 hours ago
@penguin359 While I agree that integers can be represented exactly in floating point, if you're in the situation that OP is in, you need to ask yourself how close to an integer is "close enough" for your purpose. Is
1.0 + 1e-16
"close enough"? Is 1.0 + 2e-16
? It's an important question, as IEEE 754-based "is integer" methods will treat them differently, and you may or may not want to consider 1.0 + 2e-16
"not an integer" while saying 1.0 + 1e-16
is one. -- Having an explicit epsilon (versus the implicit one from IEEE 754) makes your desires clearer.– R.M.
6 hours ago
A comment seeming best at this answer: Setting an epsilon works as in the example provided works fine. Alternatively, especially if dealing with cents (currencies in general), I found it more useful to change from Python's default of binary representation to decimal one, as provided by module decimal (docs.python.org/3.7/library/decimal.html). The difference, for example in a loop iterating from -1 to +1 in increments of 0.1 is either passing very close to 0, or right at 0.0 -- without need for an epsilon set (how would you deal with -1.3877787807814457e-16 currency units?).
– Buttonwood
6 hours ago
A comment seeming best at this answer: Setting an epsilon works as in the example provided works fine. Alternatively, especially if dealing with cents (currencies in general), I found it more useful to change from Python's default of binary representation to decimal one, as provided by module decimal (docs.python.org/3.7/library/decimal.html). The difference, for example in a loop iterating from -1 to +1 in increments of 0.1 is either passing very close to 0, or right at 0.0 -- without need for an epsilon set (how would you deal with -1.3877787807814457e-16 currency units?).
– Buttonwood
6 hours ago
add a comment |
Use this function, is_integer
is a function from the float
class,
You can just use this method to_int
to use is_integer
to check whether it is a integer (i.e 1.0
) or a float (i.e 1.5
),
If it is a integer-like float, return int(a)
, otherwise just return it's original value,
As you see, I am not using elif
or else
, just directly, because return
only return
s the first return
's value:
def to_int(a):
if a.is_integer():
return int(a)
return a
print(to_int(1.5))
print(to_int(1.0))
Output:
1.5
1
References:
https://python-reference.readthedocs.io/en/latest/docs/float/is_integer.html
https://python-reference.readthedocs.io/en/latest/docs/float
I just thought of another way, using replace
of the str
class, that works because you're only replacing .0
, so .5
won't effect,
Only problem is that 1.00
won't work, it will output 10
,
But this is still a simple solution:
a = 1.5
print(str(a).replace('.0', ''))
b = 1.0
print(str(b).replace('.0', ''))
Output:
1.5
1
References:
https://python-reference.readthedocs.io/en/latest/docs/str/replace.html
https://python-reference.readthedocs.io/en/latest/docs/str
add a comment |
Use this function, is_integer
is a function from the float
class,
You can just use this method to_int
to use is_integer
to check whether it is a integer (i.e 1.0
) or a float (i.e 1.5
),
If it is a integer-like float, return int(a)
, otherwise just return it's original value,
As you see, I am not using elif
or else
, just directly, because return
only return
s the first return
's value:
def to_int(a):
if a.is_integer():
return int(a)
return a
print(to_int(1.5))
print(to_int(1.0))
Output:
1.5
1
References:
https://python-reference.readthedocs.io/en/latest/docs/float/is_integer.html
https://python-reference.readthedocs.io/en/latest/docs/float
I just thought of another way, using replace
of the str
class, that works because you're only replacing .0
, so .5
won't effect,
Only problem is that 1.00
won't work, it will output 10
,
But this is still a simple solution:
a = 1.5
print(str(a).replace('.0', ''))
b = 1.0
print(str(b).replace('.0', ''))
Output:
1.5
1
References:
https://python-reference.readthedocs.io/en/latest/docs/str/replace.html
https://python-reference.readthedocs.io/en/latest/docs/str
add a comment |
Use this function, is_integer
is a function from the float
class,
You can just use this method to_int
to use is_integer
to check whether it is a integer (i.e 1.0
) or a float (i.e 1.5
),
If it is a integer-like float, return int(a)
, otherwise just return it's original value,
As you see, I am not using elif
or else
, just directly, because return
only return
s the first return
's value:
def to_int(a):
if a.is_integer():
return int(a)
return a
print(to_int(1.5))
print(to_int(1.0))
Output:
1.5
1
References:
https://python-reference.readthedocs.io/en/latest/docs/float/is_integer.html
https://python-reference.readthedocs.io/en/latest/docs/float
I just thought of another way, using replace
of the str
class, that works because you're only replacing .0
, so .5
won't effect,
Only problem is that 1.00
won't work, it will output 10
,
But this is still a simple solution:
a = 1.5
print(str(a).replace('.0', ''))
b = 1.0
print(str(b).replace('.0', ''))
Output:
1.5
1
References:
https://python-reference.readthedocs.io/en/latest/docs/str/replace.html
https://python-reference.readthedocs.io/en/latest/docs/str
Use this function, is_integer
is a function from the float
class,
You can just use this method to_int
to use is_integer
to check whether it is a integer (i.e 1.0
) or a float (i.e 1.5
),
If it is a integer-like float, return int(a)
, otherwise just return it's original value,
As you see, I am not using elif
or else
, just directly, because return
only return
s the first return
's value:
def to_int(a):
if a.is_integer():
return int(a)
return a
print(to_int(1.5))
print(to_int(1.0))
Output:
1.5
1
References:
https://python-reference.readthedocs.io/en/latest/docs/float/is_integer.html
https://python-reference.readthedocs.io/en/latest/docs/float
I just thought of another way, using replace
of the str
class, that works because you're only replacing .0
, so .5
won't effect,
Only problem is that 1.00
won't work, it will output 10
,
But this is still a simple solution:
a = 1.5
print(str(a).replace('.0', ''))
b = 1.0
print(str(b).replace('.0', ''))
Output:
1.5
1
References:
https://python-reference.readthedocs.io/en/latest/docs/str/replace.html
https://python-reference.readthedocs.io/en/latest/docs/str
edited 1 hour ago
answered 18 hours ago
U9-ForwardU9-Forward
17.9k51743
17.9k51743
add a comment |
add a comment |
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.
New contributor
1
The question was to convert a float to int whenever the float in question has an integer value. AFAIK this is not possible in C++, because you cannot return different values from a function.
– M.Herzkamp
14 hours ago
3
@M.Herzkamp you could have aunion
though.
– Baldrickk
14 hours ago
And also you could set another integer variable and save the float there if the condition above is met
– Stefan Kostoski
13 hours ago
The digression on C++ isn't really relevant. You can do the same thing in Python:foo = lambda x: int(x) if int(x) == x else x
. (Or in Python 3.8, to avoid the duplicate call toint
,lambda x: y if (y:=int(x)) == x else x
.
– chepner
13 hours ago
@chepner I triedfoo = lambda x: int(x) if int(x) == x else x
the very moment I wrote the answer above, for some reason it did not work for me in 3.6. Any clue?
– DirtyBit
13 hours ago
|
show 1 more comment
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.
New contributor
1
The question was to convert a float to int whenever the float in question has an integer value. AFAIK this is not possible in C++, because you cannot return different values from a function.
– M.Herzkamp
14 hours ago
3
@M.Herzkamp you could have aunion
though.
– Baldrickk
14 hours ago
And also you could set another integer variable and save the float there if the condition above is met
– Stefan Kostoski
13 hours ago
The digression on C++ isn't really relevant. You can do the same thing in Python:foo = lambda x: int(x) if int(x) == x else x
. (Or in Python 3.8, to avoid the duplicate call toint
,lambda x: y if (y:=int(x)) == x else x
.
– chepner
13 hours ago
@chepner I triedfoo = lambda x: int(x) if int(x) == x else x
the very moment I wrote the answer above, for some reason it did not work for me in 3.6. Any clue?
– DirtyBit
13 hours ago
|
show 1 more comment
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.
New contributor
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.
New contributor
New contributor
answered 15 hours ago
Stefan KostoskiStefan Kostoski
111
111
New contributor
New contributor
1
The question was to convert a float to int whenever the float in question has an integer value. AFAIK this is not possible in C++, because you cannot return different values from a function.
– M.Herzkamp
14 hours ago
3
@M.Herzkamp you could have aunion
though.
– Baldrickk
14 hours ago
And also you could set another integer variable and save the float there if the condition above is met
– Stefan Kostoski
13 hours ago
The digression on C++ isn't really relevant. You can do the same thing in Python:foo = lambda x: int(x) if int(x) == x else x
. (Or in Python 3.8, to avoid the duplicate call toint
,lambda x: y if (y:=int(x)) == x else x
.
– chepner
13 hours ago
@chepner I triedfoo = lambda x: int(x) if int(x) == x else x
the very moment I wrote the answer above, for some reason it did not work for me in 3.6. Any clue?
– DirtyBit
13 hours ago
|
show 1 more comment
1
The question was to convert a float to int whenever the float in question has an integer value. AFAIK this is not possible in C++, because you cannot return different values from a function.
– M.Herzkamp
14 hours ago
3
@M.Herzkamp you could have aunion
though.
– Baldrickk
14 hours ago
And also you could set another integer variable and save the float there if the condition above is met
– Stefan Kostoski
13 hours ago
The digression on C++ isn't really relevant. You can do the same thing in Python:foo = lambda x: int(x) if int(x) == x else x
. (Or in Python 3.8, to avoid the duplicate call toint
,lambda x: y if (y:=int(x)) == x else x
.
– chepner
13 hours ago
@chepner I triedfoo = lambda x: int(x) if int(x) == x else x
the very moment I wrote the answer above, for some reason it did not work for me in 3.6. Any clue?
– DirtyBit
13 hours ago
1
1
The question was to convert a float to int whenever the float in question has an integer value. AFAIK this is not possible in C++, because you cannot return different values from a function.
– M.Herzkamp
14 hours ago
The question was to convert a float to int whenever the float in question has an integer value. AFAIK this is not possible in C++, because you cannot return different values from a function.
– M.Herzkamp
14 hours ago
3
3
@M.Herzkamp you could have a
union
though.– Baldrickk
14 hours ago
@M.Herzkamp you could have a
union
though.– Baldrickk
14 hours ago
And also you could set another integer variable and save the float there if the condition above is met
– Stefan Kostoski
13 hours ago
And also you could set another integer variable and save the float there if the condition above is met
– Stefan Kostoski
13 hours ago
The digression on C++ isn't really relevant. You can do the same thing in Python:
foo = lambda x: int(x) if int(x) == x else x
. (Or in Python 3.8, to avoid the duplicate call to int
, lambda x: y if (y:=int(x)) == x else x
.– chepner
13 hours ago
The digression on C++ isn't really relevant. You can do the same thing in Python:
foo = lambda x: int(x) if int(x) == x else x
. (Or in Python 3.8, to avoid the duplicate call to int
, lambda x: y if (y:=int(x)) == x else x
.– chepner
13 hours ago
@chepner I tried
foo = lambda x: int(x) if int(x) == x else x
the very moment I wrote the answer above, for some reason it did not work for me in 3.6. Any clue?– DirtyBit
13 hours ago
@chepner I tried
foo = lambda x: int(x) if int(x) == x else x
the very moment I wrote the answer above, for some reason it did not work for me in 3.6. Any clue?– DirtyBit
13 hours ago
|
show 1 more comment
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)
2
I'm sorry but that is not a valid Python structure, would you please have it a valid Python format or allow me to edit it for you?
– DirtyBit
15 hours ago
2
As he mentioned, this is simply a logic. Not a working code. This should be fine IMO.
– Amit Joshi
13 hours ago
Added some Python code (I think). I'd like to know why the downvote? It's a simple solution that works. No weird functions or other constructs required. I didn't think an explanation was necessary, as modulo counts as basic arithmetic. IMO every developer should know what it does or should have the ability to invest 10 seconds into typing "modulo" in to the all-knowing search engine whom I shall not name.
– SimonC
13 hours ago
4
And readers should also google why it isn't possible to usereturn
outside of a function, or what the difference between==
and=
is?
– Eric Duminil
12 hours ago
7
To avoid downvotes, you should either try to answer questions for languages you're familiar with or at the very least try to run your code before posting.
– Eric Duminil
12 hours ago
add a comment |
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)
2
I'm sorry but that is not a valid Python structure, would you please have it a valid Python format or allow me to edit it for you?
– DirtyBit
15 hours ago
2
As he mentioned, this is simply a logic. Not a working code. This should be fine IMO.
– Amit Joshi
13 hours ago
Added some Python code (I think). I'd like to know why the downvote? It's a simple solution that works. No weird functions or other constructs required. I didn't think an explanation was necessary, as modulo counts as basic arithmetic. IMO every developer should know what it does or should have the ability to invest 10 seconds into typing "modulo" in to the all-knowing search engine whom I shall not name.
– SimonC
13 hours ago
4
And readers should also google why it isn't possible to usereturn
outside of a function, or what the difference between==
and=
is?
– Eric Duminil
12 hours ago
7
To avoid downvotes, you should either try to answer questions for languages you're familiar with or at the very least try to run your code before posting.
– Eric Duminil
12 hours ago
add a comment |
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)
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)
edited 13 hours ago
answered 15 hours ago
SimonCSimonC
496621
496621
2
I'm sorry but that is not a valid Python structure, would you please have it a valid Python format or allow me to edit it for you?
– DirtyBit
15 hours ago
2
As he mentioned, this is simply a logic. Not a working code. This should be fine IMO.
– Amit Joshi
13 hours ago
Added some Python code (I think). I'd like to know why the downvote? It's a simple solution that works. No weird functions or other constructs required. I didn't think an explanation was necessary, as modulo counts as basic arithmetic. IMO every developer should know what it does or should have the ability to invest 10 seconds into typing "modulo" in to the all-knowing search engine whom I shall not name.
– SimonC
13 hours ago
4
And readers should also google why it isn't possible to usereturn
outside of a function, or what the difference between==
and=
is?
– Eric Duminil
12 hours ago
7
To avoid downvotes, you should either try to answer questions for languages you're familiar with or at the very least try to run your code before posting.
– Eric Duminil
12 hours ago
add a comment |
2
I'm sorry but that is not a valid Python structure, would you please have it a valid Python format or allow me to edit it for you?
– DirtyBit
15 hours ago
2
As he mentioned, this is simply a logic. Not a working code. This should be fine IMO.
– Amit Joshi
13 hours ago
Added some Python code (I think). I'd like to know why the downvote? It's a simple solution that works. No weird functions or other constructs required. I didn't think an explanation was necessary, as modulo counts as basic arithmetic. IMO every developer should know what it does or should have the ability to invest 10 seconds into typing "modulo" in to the all-knowing search engine whom I shall not name.
– SimonC
13 hours ago
4
And readers should also google why it isn't possible to usereturn
outside of a function, or what the difference between==
and=
is?
– Eric Duminil
12 hours ago
7
To avoid downvotes, you should either try to answer questions for languages you're familiar with or at the very least try to run your code before posting.
– Eric Duminil
12 hours ago
2
2
I'm sorry but that is not a valid Python structure, would you please have it a valid Python format or allow me to edit it for you?
– DirtyBit
15 hours ago
I'm sorry but that is not a valid Python structure, would you please have it a valid Python format or allow me to edit it for you?
– DirtyBit
15 hours ago
2
2
As he mentioned, this is simply a logic. Not a working code. This should be fine IMO.
– Amit Joshi
13 hours ago
As he mentioned, this is simply a logic. Not a working code. This should be fine IMO.
– Amit Joshi
13 hours ago
Added some Python code (I think). I'd like to know why the downvote? It's a simple solution that works. No weird functions or other constructs required. I didn't think an explanation was necessary, as modulo counts as basic arithmetic. IMO every developer should know what it does or should have the ability to invest 10 seconds into typing "modulo" in to the all-knowing search engine whom I shall not name.
– SimonC
13 hours ago
Added some Python code (I think). I'd like to know why the downvote? It's a simple solution that works. No weird functions or other constructs required. I didn't think an explanation was necessary, as modulo counts as basic arithmetic. IMO every developer should know what it does or should have the ability to invest 10 seconds into typing "modulo" in to the all-knowing search engine whom I shall not name.
– SimonC
13 hours ago
4
4
And readers should also google why it isn't possible to use
return
outside of a function, or what the difference between ==
and =
is?– Eric Duminil
12 hours ago
And readers should also google why it isn't possible to use
return
outside of a function, or what the difference between ==
and =
is?– Eric Duminil
12 hours ago
7
7
To avoid downvotes, you should either try to answer questions for languages you're familiar with or at the very least try to run your code before posting.
– Eric Duminil
12 hours ago
To avoid downvotes, you should either try to answer questions for languages you're familiar with or at the very least try to run your code before posting.
– Eric Duminil
12 hours ago
add a comment |
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.
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.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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
3
one way could be to check the float using
is_integer()
if that passes, convert it toint
?– DirtyBit
18 hours ago
4
Floats are approximations,
1.0
could actually be1.00000000000001
or0.999999999999
.– Barmar
18 hours ago
42
Why would you want to do this, anyway?
– Barmar
18 hours ago
2
Note that because of duck typing, this passage you want to achieve is probably out of place or useless, depending on context.
– Federico S
18 hours ago
9
Please specify your exact requirements in words/rules rather than just with a single example!
– Lightness Races in Orbit
15 hours ago