UInt为什么没有toDouble()?

时间:2019-04-11 16:06:15

标签: kotlin

考虑:

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

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

这对我来说没有意义。 UInt为什么没有toDouble? (它也没有.toFloat)。

The docs say

  

每种数字类型都支持以下转换:

     
      
  • toByte():字节
  •   
  • toShort():短
  •   
  • toInt():Int
  •   
  • toLong():长
  •   
  • toFloat():浮动
  •   
  • toDouble():Double
  •   
  • toChar():字符
  •   

所以应该有可能。我得到的错误是:

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 个答案:

答案 0 :(得分:21)

this YouTrack request称,这似乎是1.3.30。

1.3.30只是recently tagged,并且似乎很快就会发布。

答案 1 :(得分:17)

  

UInt不是数字类型吗?

是的,它不会扩展Number类。

Int的声明:

class Int : Number, Comparable<Int>

UInt的声明:

inline class UInt : Comparable<UInt>

从Kotlin版本1.3.30开始,UInt具有toFloattoDouble方法。

答案 2 :(得分:1)

添加了最新版本1.3.30中的支持。

此版本(More)为无符号类型和无符号类型数组的更多操作提供了支持,这些操作与常规数字类型的镜像相同:

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)