How to determine if a decimal/double is an integer?
For floating point numbers, n % 1 == 0
is typically the way to check if there is anything past the decimal point.
public static void Main (string[] args)
{
decimal d = 3.1M;
Console.WriteLine((d % 1) == 0);
d = 3.0M;
Console.WriteLine((d % 1) == 0);
}
Output:
False
True
Update: As @Adrian Lopez mentioned below, comparison with a small value epsilon
will discard floating-point computation mis-calculations. Since the question is about double
values, below will be a more floating-point calculation proof answer:
Math.Abs(d % 1) <= (Double.Epsilon * 100)
How to test if a double is an integer
if ((variable == Math.floor(variable)) && !Double.isInfinite(variable)) {
// integer type
}
This checks if the rounded-down value of the double is the same as the double.
Your variable could have an int or double value and Math.floor(variable)
always has an int value, so if your variable is equal to Math.floor(variable)
then it must have an int value.
This also doesn't work if the value of the variable is infinite or negative infinite hence adding 'as long as the variable isn't inifinite' to the condition.
How can I accurately determine if a double is an integer?
double
can store an exact representation of certain values, such as small integers and (negative or positive) powers of two.
If it does indeed store an exact integer, then ((int)d == d)
works fine. And indeed, for any 32-bit integer i, (int)((double)i) == i
since a double can exactly represent it.
Note that for very large numbers (greater than about 2**52 in magnitude), a double will always appear to be an integer, as it will no longer be able to store any fractional part. This has implications if you are trying to cast to a Java long
, for instance.
What's a good way to check if a double is an integer in C#?
return Math.Truncate(number) == number;
As mentioned in the comments, you might need to take account of the fact that a double
representation of your number might not be an exact integer. In that case you'll need to allow for some margin-of-error:
double diff = Math.Abs(Math.Truncate(number) - number);
return (diff < 0.0000001) || (diff > 0.9999999);
Checking if a double value is an integer - Swift
Try 'flooring' the double value then checking if it is unchanged:
let dbl = 2.0
let isInteger = floor(dbl) == dbl // true
Fails if it is not an integer
let dbl = 2.4
let isInteger = floor(dbl) == dbl // false
How to check if a double value has no decimal part
You could simply do
d % 1 == 0
to check if double d
is a whole.
Check if a number has a decimal place/is a whole number
Using modulus will work:
num % 1 != 0
// 23 % 1 = 0
// 23.5 % 1 = 0.5
Note that this is based on the numerical value of the number, regardless of format. It treats numerical strings containing whole numbers with a fixed decimal point the same as integers:
'10.0' % 1; // returns 0
10 % 1; // returns 0
'10.5' % 1; // returns 0.5
10.5 % 1; // returns 0.5
Related Topics
Why Do Bcl Collections Use Struct Enumerators, Not Classes
ASP.NET Adding Class to Current Menuitem
Signalr(V2.2.0) Ondisconnected Set User Offline
What Are Checked Exceptions in Java/C#
How to Get the "Friendly" Os Version Name
How to Get the Range of Occupied Cells in Excel Sheet
Drawing Glitches When Using Creategraphics Rather Than Paint Event Handler for Custom Drawing
ASP.NET MVC Razor: How to Render a Razor Partial View's HTML Inside the Controller Action
Bind Textbox on Enter-Key Press
.Net Core 2.1 Identity Get All Users with Their Associated Roles
Can a Web User Control (.Ascx) Use a CSS File for Styling
Unity: Apple Game Center iOS7 Registers the Scores for Only 30 Minutes in the Leaderboard
Extending an Enum via Inheritance
What Exactly Happens When I Set Loaduserprofile of Iis Pool
How to Extract a File from an Embedded Resource and Save It to Disk