[SOLVED] Kotlin Round Up An Integer

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.

people found this article helpful. What about you?