Числовые типы в 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
}
Чтобы преобразовать числовые значения в разные типы, используйте явные преобразования.
Комментарии
Отправить комментарий