Ответ 1
Разве UInt не считается типом числа?
Да, это не расширяет класс Number
.
Декларация Int
:
class Int : Number, Comparable<Int>
Декларация UInt
:
inline class UInt : Comparable<UInt>
Рассматривать:
val foo: Int = 1
foo.toDouble() // ok
val bar = 2.toUInt()
bar.toDouble() // error!
Это не имеет смысла для меня. Почему UInt бы не toDouble
? (он также не имеет .toFloat
).
Каждый тип номера поддерживает следующие преобразования:
- toByte(): байт
- toShort(): короткий
- toInt(): Int
- toLong(): Long
- toFloat(): Float
- toDouble(): Double
- toChar(): Char
Так что это должно быть возможно. Я получаю ошибку:
Error:(11, 4) Unresolved reference. None of the following candidates is applicable because of receiver type mismatch:
@InlineOnly public inline fun String.toDouble(): Double defined in kotlin.text
Разве UInt не считается типом числа? Или что-то еще?
Разве UInt не считается типом числа?
Да, это не расширяет класс Number
.
Декларация Int
:
class Int : Number, Comparable<Int>
Декларация UInt
:
inline class UInt : Comparable<UInt>
Похоже, что это произойдет в 1.3.30, согласно этому запросу YouTrack.
1.3.30 был недавно помечен и, похоже, скоро выйдет.
Добавлена поддержка в последней версии 1.3.30
.
В этом выпуске (Подробнее) добавлена поддержка большего количества операций для неподписанных типов и массивов неподписанных типов, которые отражают операции для обычных числовых типов:
fun main() {
val u1 = 2_147_483_649u
val u2 = 4_000_000_000u
println(u1.toDouble())
println(minOf(u1, u2))
val array: UIntArray = uintArrayOf(u1, u2)
println(array.max())
println(array.all { it > Int.MAX_VALUE.toUInt() })
}
Примечание: UInt не расширяет класс Number.
/**
* Converts this [UInt] value to [Double].
*
* The resulting 'Double' value represents the same numerical value as this 'UInt'.
*/
@kotlin.internal.InlineOnly
public inline fun toDouble(): Double = uintToDouble(data)