Rounding up to the nearest Integer value functionality is something required a lot of times. Kotlin has a few inbuilt functions which can do the rounding up for us but they are a bit confusing. To decide when to use what, we need to understand which rounding function rounds up in which direction and which data types it can round up.
Let’s understand them in detail before comparing.
Before reading this blog, keep in mind that -3 is bigger than -4 and -3.5 is bigger than -3.51
Math.round()
Math.roundrounds up to the nearest Integer which can be above or below or even equal to the actual value.- In the case of a positive number, anything which is equal to or below
x.49will be converted to a lower number iex.00whereas anything which is equal to or more thanx.5will be converted to a higher number iex+1.00 - In the case of a negative number, anything which is equal to or below
-x.51will be converted to a lower number ie-x-1.00whereas anything which is equal to or more than-x.5will be converted to a higher number ie-x.00
println(Math.round(3.00))
//this will print: 3
println(Math.round(3.49))
//this will print: 3
println(Math.round(3.5))
//this will print: 4
println(Math.round(-3.00))
//this will print: -3
println(Math.round(-3.5))
//this will print: -3
println(Math.round(-3.51))
//this will print: -4
Math.floor()
Math.floorrounds up to the nearest Integer which can be equal to or below the actual value.- In the case of a positive number, anything between
x.01tox.99will be converted to a lower number iex.00whereasx.00will remain the samex.00 - In the case of a negative number, anything between
-x.01to-x.99will be converted to a lower number ie-x-1.00whereas-x.00will remain the same-x.00
println(Math.floor(3.00))
//this will print: 3
println(Math.floor(3.01))
//this will print: 3
println(Math.floor(3.99))
//this will print: 3
println(Math.floor(-3.00))
//this will print: -3
println(Math.floor(-3.01))
//this will print: -4
println(Math.floor(-3.99))
//this will print: -4
Math.ceil()
Math.ceilrounds up to the nearest Integer which can be equal to or above the actual value.- In the case of a positive number, anything between
x.01tox.99will be converted to an upper number iex+1.00whereasx.00will remain the samex.00 - In the case of a negative number, anything between
-x.01to-x.99will be converted to an upper number ie-x.00whereas-x.00will remain the same-x.00
println(Math.ceil(3.00))
//this will print: 3
println(Math.ceil(3.01))
//this will print: 4
println(Math.ceil(3.99))
//this will print: 4
println(Math.ceil(-3.00))
//this will print: -3
println(Math.ceil(-3.01))
//this will print: -3
println(Math.ceil(-3.99))
//this will print: -3
Common between Math.round, Math.floor and Math.ceil
- All three work on both
Doubleas well as onFloat. - Although they round to the nearest
Integer, the output still remainsDoublein the case ofDoubleandFloatin the case ofFloat.
Difference between Math.round, Math.floor and Math.ceil
Math.round rounds up to the nearest Integer which can be above, below or equal to the actual value.
- x.0 to x.49 -> x.0
- x.5 to x.99 -> x+1.0
- -x to -x.5 -> x.0
- -x.51 to -x.99 -> -x-1.0
Math.floor rounds up to the nearest Integer which can be equal to or below the actual value.
- x.0 to x.99 -> x.0
- -x.01 to -x.99 -> -x-1.0
Math.ceil rounds up to the nearest Integer which can be equal to or above the actual value.
- x.01 to x.99 -> x+1.0
- -x.01 to -x.99 -> -x.0