Double.roundToInt în Kotlin

Rotunjește un Double la cel mai apropiat Int; jumătățile (2.5) se rotunjesc în sus.

Sintaxă
import kotlin.math.roundToInt
fun Double.roundToInt(): Int
fun Double.roundToLong(): Long
fun Float.roundToInt(): Int

Ce face Double.roundToInt

9.5.roundToInt() returnează 10, ca Int. Spre deosebire de round(), la jumătate exactă rotunjește mereu în sus (spre plus infinit): 2.5 devine 3, iar -2.5 devine -2. Este rotunjirea pe care o folosim la note și medii.

Valorile prea mari pentru Int devin Int.MAX_VALUE (sau Int.MIN_VALUE), iar NaN aruncă IllegalArgumentException. Pentru numere mari folosește roundToLong(). Funcția trebuie importată din kotlin.math.

Ce returnează

Un Int (sau Long pentru roundToLong).

Exemple

Exemplul 1: Rotunjire față de toInt

toInt() taie zecimalele, roundToInt() rotunjește.

import kotlin.math.roundToInt

fun main() {
    for (x in listOf(8.4, 8.5, 8.6, -2.5)) {
        println("$x: toInt=${x.toInt()}, roundToInt=${x.roundToInt()}")
    }
}

Rezultat

8.4: toInt=8, roundToInt=8
8.5: toInt=8, roundToInt=9
8.6: toInt=8, roundToInt=9
-2.5: toInt=-2, roundToInt=-2

Exemplul 2: Media finală a unui elev

Media 8.5 se rotunjește la 9, ca la școală.

import kotlin.math.roundToInt

fun main() {
    val note = listOf(9, 8, 10, 7)
    val media = note.average()
    println("Media: $media")
    println("Media rotunjită: ${media.roundToInt()}")
}

Rezultat

Media: 8.5
Media rotunjită: 9

Exemplul 3: Procente întregi

Rezultatul împărțirii devine procent întreg, potrivit pentru afișare.

import kotlin.math.roundToInt

fun main() {
    val voturi = mapOf("Da" to 487, "Nu" to 312, "Abținere" to 54)
    val total = voturi.values.sum()
    for ((optiune, n) in voturi) {
        println("$optiune: ${(n * 100.0 / total).roundToInt()}%")
    }
}

Rezultat

Da: 57%
Nu: 37%
Abținere: 6%

Greșeli frecvente

  • Uiți importul kotlin.math.roundToInt și primești Unresolved reference.
  • Calculezi (n * 100 / total).roundToInt() cu întregi: împărțirea întreagă dă deja un Int fără zecimale. Folosește 100.0.

Comenzi înrudite

  • round: Rotunjesc un număr zecimal: round la cel mai apropiat întreg, floor în jos, ceil în sus, truncate taie zecimalele.
  • Int.toDouble: Conversii explicite între tipurile numerice: toDouble face un Int zecimal, toInt taie zecimalele unui Double.