Why does Math.Floor(Double) return a value of type Double?
The range of double
is much wider than the range of int
or long
. Consider this code:
double d = 100000000000000000000d;
long x = Math.Floor(d); // Invalid in reality
The integer is outside the range of long
- so what would you expect to happen?
Typically you know that the value will actually be within the range of int
or long
, so you cast it:
double d = 1000.1234d;
int x = (int) Math.Floor(d);
but the onus for that cast is on the developer, not on Math.Floor
itself. It would have been unnecessarily restrictive to make it just fail with an exception for all values outside the range of long
.
According to MSDN, Math.Floor(double) returns a double: http://msdn.microsoft.com/en-us/library/e0b5f0xb.aspx
If you want it as an int:
int result = (int)Math.Floor(yourVariable);
I can see how the MSDN article can be misleading, they should have specified that while the result is an "integer" (in this case meaning whole number) it is still of TYPE Double
If you just need the integer portion of a number, cast the number to an int
. This will truncate the number at the decimal point.
double myDouble = 4.6;
int myInteger = (int)myDouble;