정수 타입 사이의 변환은 대상 타입이 더 큰 범위를 담는 타입인 경우 손실 없이 수행된다. 그렇지 않은 경우 MSB(2진수로 표현했을 때 상위 비트 쪽)를 잘라내고 나머지를 대상 타입의 값으로 변환한다. Char 타입을 다른 타입의 값으로 바꾸거나 다른 타입의 값을 Char 타입으로 바꾸는 경우도 그렇다.
val n = 945 println(n.toByte()) // -79 println(n.toShort()) // 945 println(n.toChar()) // α println(n.toLong()) // 945
부동소수점 수 타입과 관련된 변환의 경우, 일반적으로 대상 타입과 무관하게 정밀도를 잃을 수 있다. 예를 들어 Long을 Float로 변환하면 LSB 쪽(2진수로 표현했을 때 하위 비트 쪽)을 잃어버릴 수 있다. 부동소수점 수를 정수로 변환하는 연산은 기본적으로 0 쪽으로 어림(rounding to zere)3하는 연산이다.
println(2.5.toInt()) // 2 println((-2.5).toInt()) // -2 println(1_000_000_000_000.toFloat().toLong()) // 999999995904