考虑一下:
val foo: Int = 1
foo.toDouble() // ok
val bar = 2.toUInt()
bar.toDouble() // error!
这对我来说没什么意义。为什么UInt不能有toDouble
?(它也没有.toFloat
)。
Every number类型支持以下转换:
字符集toByte():Byte
所以这应该是可能的。我得到的错误是:
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不是数字类型吗?或者是其他原因?
发布于 2019-04-12 00:12:50
UInt不是数字类型吗?
是的,它没有扩展Number
类。
Int
的声明
class Int : Number, Comparable<Int>
UInt
的声明
inline class UInt : Comparable<UInt>
从Kotlin版本1.3.30开始, toFloat
具有 UInt
和 toDouble
方法。
发布于 2019-04-12 00:13:21
根据this YouTrack request的说法,这似乎将在1.3.30中出现。
1.3.30只是recently tagged,似乎很快就会发布。
发布于 2019-04-12 18:01:44
在最新版本的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)
https://stackoverflow.com/questions/55636856
复制相似问题