Числовые типы в Kotlin

В Kotlin все является объектом в том смысле, что мы можем вызывать функции-члены и свойства для любой переменной. Некоторые из типов могут иметь специальное внутреннее представление - например, числа, символы и логические значения могут быть представлены как примитивные значения во время выполнения - но для пользователя они выглядят как обычные классы.

Kotlin предоставляет набор встроенных типов, которые представляют числа.

Для целых чисел существует четыре типа с разными размерами и, следовательно, диапазонами значений.

Тип Размер (битов) Минимальное значение Максимальное значение
Byte
8 -128 127
Short
16 -32768 32767
Int
32 -2,147,483,648 (-2 exp 31) 2,147,483,647 ((2 exp 31) - 1)
Long
64 -9,223,372,036,854,775,808 (-2 exp 63) 9,223,372,036,854,775,807 ((2 exp 63) - 1)

Все переменные, инициализированные целочисленными значениями, не превышающими максимальное значение Int, имеют предполагаемый тип Int. Если начальное значение превышает это значение, типом является Long. Чтобы явно указать значение Long, добавьте к значению суффикс L.

val one = 1 // Int
val threeBillion = 3000000000 // Long
val oneLong = 1L // Long
val oneByte: Byte = 1

Для чисел с плавающей точкой Kotlin предоставляет типы Float и Double. В соответствии со стандартом IEEE 754 типы с плавающей запятой отличаются по своему десятичному знаку, то есть сколько десятичных цифр они могут хранить. Float отражает одинарную точность IEEE 754, а Double обеспечивает двойную точность.

Тип Размер (битов) Значимые биты Экспонентные биты Десятичные цифры
Float
32 24 8 6-7
Double
64 53 11 15-16

Для переменных, инициализированных дробными числами, компилятор выводит тип Double. Чтобы явно указать тип Float для значения, добавьте суффикс f или F. Если такое значение содержит более 6-7 десятичных цифр, оно будет округлено.

val pi = 3.14 // Double
val e = 2.7182818284 // Double
val eFloat = 2.7182818284f // Float, фактическое значение 2.7182817

Обратите внимание, что в отличие от некоторых других языков, в Kotlin нет неявных расширяющих преобразований для чисел. Например, функция с параметром Double может вызываться только для значений Double, но не для чисел с плавающей запятой, Int или других числовых значений.

fun main() {
    fun printDouble(d: Double) { print(d) }

    val i = 1    
    val d = 1.1
    val f = 1.1f 

    printDouble(d)
//    printDouble(i) // Error: Type mismatch
//    printDouble(f) // Error: Type mismatch
}

Чтобы преобразовать числовые значения в разные типы, используйте явные преобразования.


Комментарии

Популярные сообщения из этого блога

Строки в Kotlin

Наследование в Kotlin

Возврат и прыжки в Kotlin