Issue
This Content is from Stack Overflow. Question asked by Arda
Let’s say I have an integer like 588 and
I want to round that number up to 590
Or:
397 -> 400,
233 -> 230
…
Or maybe:
388 -> 400
77 -> 100
Does Kotlin has a function for these kind of situations? Or do I need to create my own algorithm for that?
Solution
You’re doing arbitrary rounding, so no there’s nothing like that built in – only functions for rounding to the nearest integer in various ways.
You could write a basic rounding function like this:
fun Int.roundToClosest(step: Int): Int {
require(step > 0)
// in this case 'lower' meaning 'closer to zero'
val lower = this - (this % step)
val upper = lower + if (this >= 0) step else -step
return if (this - lower < upper - this) lower else upper
}
println(-5.roundToClosest(10))
>> -10
In this case it "rounds up" away from zero, so for negative numbers it increases their magnitude instead of rounding up towards positive infinity. If you want ceil
behaviour (rounding to positive infinity) I’ll leave that as an exercise for the reader!
This Question was asked in StackOverflow by Arda and Answered by cactustictacs It is licensed under the terms of CC BY-SA 2.5. - CC BY-SA 3.0. - CC BY-SA 4.0.