Почему у UInt нет toDouble ()? - PullRequest
28 голосов
/ 11 апреля 2019

Рассмотрим:

val foo: Int = 1
foo.toDouble() // ok

val bar = 2.toUInt()
bar.toDouble() // error!

Это не имеет смысла для меня. Почему бы не иметь 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 не считается числовым типом? Или это что-то еще?

Ответы [ 3 ]

21 голосов
/ 11 апреля 2019

Похоже, что это происходит в 1.3.30, согласно этому запросу YouTrack .

1.3.30 было просто недавно помечено и, похоже, оченьв ближайшее время.

17 голосов
/ 11 апреля 2019

Разве UInt не считается типом числа?

Да, он не расширяется Number класс.

Объявление Int:

class Int : Number, Comparable<Int>

Декларация UInt:

inline class UInt : Comparable<UInt>

Начиная с версии Kotlin 1.3.30 UInt имеет toFloat и toDouble методы.

1 голос
/ 12 апреля 2019

Добавлена ​​поддержка в последней версии 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...