Math.Floor rounds down, Math.Ceiling rounds up, and Math.Truncate rounds towards zero. Thus, Math.Truncate is like Math.Floor for positive numbers, and like Math.Ceiling for negative numbers. Here's the reference.
For completeness, Math.Round rounds to the nearest integer. If the number is exactly midway between two integers, then it rounds towards the even one. Reference.
See also: Pax Diablo's answer. Highly recommended!
Hans Kesting
36.7k9 gold badges80 silver badges105 bronze badges
answered Aug 1, 2008 at 12:26
C. K. YoungC. K. Young
215k44 gold badges383 silver badges426 bronze badges
4
Follow these links for the MSDN descriptions of:
- Math.Floor, which rounds down towards negative infinity.
- Math.Ceiling, which rounds up towards positive infinity.
- Math.Truncate, which rounds up or down towards zero.
- Math.Round, which rounds to the nearest integer or specified number of decimal places. You can specify the behavior if it's exactly equidistant between two possibilities, such as rounding so that the final digit is even ("Round(2.5,MidpointRounding.ToEven)" becoming 2) or so that it's further away from zero ("Round(2.5,MidpointRounding.AwayFromZero)" becoming 3).
The following diagram and table may help:
-3 -2 -1 0 1 2 3 +--|------+---------+----|----+--|------+----|----+-------|-+ a b c d e a=-2.7 b=-0.5 c=0.3 d=1.5 e=2.8 ====== ====== ===== ===== ===== Floor -3 -1 0 1 2 Ceiling -2 0 1 2 3 Truncate -2 0 0 1 2 Round (ToEven) -3 0 0 2 3 Round (AwayFromZero) -3 -1 0 2 3Note that Round is a lot more powerful than it seems, simply because it can round to a specific number of decimal places. All the others round to zero decimals always. For example:
n = 3.145; a = System.Math.Round (n, 2, MidpointRounding.ToEven); // 3.14 b = System.Math.Round (n, 2, MidpointRounding.AwayFromZero); // 3.15With the other functions, you have to use multiply/divide trickery to achieve the same effect:
c = System.Math.Truncate (n * 100) / 100; // 3.14 d = System.Math.Ceiling (n * 100) / 100; // 3.15
Hans Kesting
36.7k9 gold badges80 silver badges105 bronze badges
answered Feb 24, 2009 at 2:39
paxdiablopaxdiablo
826k227 gold badges1548 silver badges1915 bronze badges
4
Math.Floor() rounds toward negative infinity
Math.Truncate rounds up or down towards zero.
For example:
Math.Floor(-3.4) = -4 Math.Truncate(-3.4) = -3while
Math.Floor(3.4) = 3 Math.Truncate(3.4) = 3answered Jul 19, 2011 at 3:56
0
Math.floor sliiiide to the left...
Math.ceil sliiiide to the right...
Math.truncate criiiiss crooooss (floor/ceil always towards 0)
Math.round cha cha, real
smooth... (go to closest side)
Let's go to work! (⌐□_□)
To the left... Math.floor
Take it back now y'all... --
Two hops this time... -=2
Everybody clap your hands ✋✋
How low can you go? Can you go down low? All the way to the floor?
if (this == "wrong") return "i don't wanna be right";Math.truncate(x) is also the same as int(x).
by removing a positive or negative fraction, you're always heading towards 0.
answered Feb 11, 2018 at 15:03
PuddlePuddle
2,7551 gold badge17 silver badges32 bronze badges
0
Some examples:
Round(1.5) = 2 Round(2.5) = 2 Round(1.5, MidpointRounding.AwayFromZero) = 2 Round(2.5, MidpointRounding.AwayFromZero) = 3 Round(1.55, 1) = 1.6 Round(1.65, 1) = 1.6 Round(1.55, 1, MidpointRounding.AwayFromZero) = 1.6 Round(1.65, 1, MidpointRounding.AwayFromZero) = 1.7 Truncate(2.10) = 2 Truncate(2.00) = 2 Truncate(1.90) = 1 Truncate(1.80) = 1answered Aug 5, 2008 at 11:01
Marek GrzenkowiczMarek Grzenkowicz
16.7k9 gold badges83 silver badges105 bronze badges
They are functionally equivalent with positive numbers. The difference is in how they handle negative numbers.
For example:
Math.Floor(2.5) = 2 Math.Truncate(2.5) = 2 Math.Floor(-2.5) = -3 Math.Truncate(-2.5) = -2MSDN links: - Math.Floor Method - Math.Truncate Method
P.S. Beware of Math.Round it may not be what you expect.
To get the "standard" rounding result use:
float myFloat = 4.5; Console.WriteLine( Math.Round(myFloat) ); // writes 4 Console.WriteLine( Math.Round(myFloat, 0, MidpointRounding.AwayFromZero) ) //writes 5 Console.WriteLine( myFloat.ToString("F0") ); // writes 5
Sнаđошƒаӽ
15.8k12 gold badges73 silver badges86 bronze badges
answered Jan 2, 2015 at 13:09
SandeshSandesh
1,1683 gold badges21 silver badges41 bronze badges
Try this, Examples:
Math.Floor() vs Math.Truncate()
Math.Floor(2.56) = 2 Math.Floor(3.22) = 3 Math.Floor(-2.56) = -3 Math.Floor(-3.26) = -4 Math.Truncate(2.56) = 2 Math.Truncate(2.00) = 2 Math.Truncate(1.20) = 1 Math.Truncate(-3.26) = -3 Math.Truncate(-3.96) = -3Also Math.Round()
Math.Round(1.6) = 2 Math.Round(-8.56) = -9 Math.Round(8.16) = 8 Math.Round(8.50) = 8 Math.Round(8.51) = 9math.floor()
Returns the largest integer less than or equal to the specified number. MSDN system.math.floor
math.truncate()
Calculates the integral part of a number. MSDN system.math.truncate
answered Feb 12, 2016 at 9:12
safin chackosafin chacko
1,3521 gold badge10 silver badges18 bronze badges
0
Math.Floor(): Returns the largest integer less than or equal to the specified double-precision floating-point number.
Math.Round(): Rounds a value to the nearest integer or to the specified number of fractional digits.
Sнаđошƒаӽ
15.8k12 gold badges73 silver badges86 bronze badges
answered Sep 19, 2013 at 11:44
PinkyPinky
6638 silver badges19 bronze badges
1
Math.floor() will always round down ie., it returns LESSER integer. While round() will return the NEAREST integer
math.floor()
Returns the largest integer less than or equal to the specified number.
math.truncate()
Calculates the integral part of a number.
safin chacko
1,3521 gold badge10 silver badges18 bronze badges
answered Jul 17, 2018 at 7:14
vidyvidy
1,4444 gold badges23 silver badges39 bronze badges
Math.Floor() :
It gives the largest integer less than or equal to the given number.
Math.Floor(3.45) =3 Math.Floor(-3.45) =-4Math.Truncate():
It removes the decimal places of the number and replace with zero
Math.Truncate(3.45)=3 Math.Truncate(-3.45)=-3Also from above examples we can see that floor and truncate are same for positive numbers.
answered Jun 24, 2020 at 8:43
AnonymousAnonymous
821 silver badge11 bronze badges
Truncate drops the decimal point.
answered Mar 22, 2020 at 19:17
Paul MoorePaul Moore
1361 silver badge16 bronze badges
Going by the Mathematical Definition of Floor, that is, "Greatest integer less than or equal to a number", This is completely unambiguous, whereas, Truncate just removes the fractional part, which is equivalent to round towards 0.
answered Nov 28, 2020 at 16:49