Int.toDouble în Kotlin

Conversii explicite între tipurile numerice: toDouble face un Int zecimal, toInt taie zecimalele unui Double.

Sintaxă
fun Int.toDouble(): Double
fun Double.toInt(): Int
fun Int.toLong(): Long

Ce face Int.toDouble

Kotlin nu transformă automat numerele dintr-un tip în altul: un Int nu poate fi pus direct într-o variabilă Double. Conversia se face explicit, cu funcții ca toDouble(), toInt(), toLong(). În schimb, într-o operație ca 5 / 2.0, rezultatul este automat Double.

Double.toInt() taie zecimalele (spre zero), nu rotunjește: 9.99.toInt() este 9, iar -9.99.toInt() este -9. Valorile prea mari devin Int.MAX_VALUE, iar NaN devine 0. Pentru rotunjire, folosește roundToInt().

toDouble() se folosește des ca să eviți împărțirea întreagă: 7 / 2 este 3, dar 7.toDouble() / 2 este 3.5.

Ce returnează

Numărul convertit în tipul cerut.

Exemple

Exemplul 1: Împărțirea întreagă și toDouble

Între două Int, împărțirea taie restul. Cu un operand Double, rezultatul are zecimale.

fun main() {
    val puncte = 47
    val probe = 5
    println(puncte / probe)
    println(puncte.toDouble() / probe)
    val media: Double = puncte.toDouble()
    println(media)
}

Rezultat

9
9.4
47.0

Exemplul 2: toInt taie zecimalele

Indiferent cât de aproape de următorul întreg, toInt păstrează doar partea întreagă.

import kotlin.math.roundToInt

fun main() {
    for (x in listOf(9.99, 9.01, -9.99)) {
        println("$x: toInt=${x.toInt()}, roundToInt=${x.roundToInt()}")
    }
    println(1e12.toInt())
}

Rezultat

9.99: toInt=9, roundToInt=10
9.01: toInt=9, roundToInt=9
-9.99: toInt=-9, roundToInt=-10
2147483647

Exemplul 3: Procent de promovare

Fără toDouble(), 23 / 30 ar fi 0, iar procentul ar ieși 0.

fun main() {
    val promovati = 23
    val total = 30
    println("Greșit: ${promovati / total * 100}%")
    println("Corect: ${promovati.toDouble() / total * 100}%")
}

Rezultat

Greșit: 0%
Corect: 76.66666666666667%

Greșeli frecvente

  • Scrii val x: Double = 5. Kotlin nu convertește automat; scrie 5.0 sau 5.toDouble().
  • Folosești toInt() pentru rotunjire: 8.9.toInt() dă 8. Folosește roundToInt().

Comenzi înrudite

  • Double.roundToInt: Rotunjește un Double la cel mai apropiat Int; jumătățile (2.5) se rotunjesc în sus.
  • Int.toString: toString transformă un număr în text (opțional în altă bază, ca 2 sau 16); toChar dă caracterul cu acel cod.
  • String.toDouble: Transformă un text într-un număr cu zecimale (Double); toDoubleOrNull returnează null dacă textul nu e număr.
  • Int.MAX_VALUE: Cea mai mare valoare pe care o poate ține un Int (2147483647); MIN_VALUE este cea mai mică.