首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么UInt没有toDouble()?

为什么UInt没有toDouble()?
EN

Stack Overflow用户
提问于 2019-04-12 00:06:15
回答 3查看 1.7K关注 0票数 29

考虑一下:

代码语言:javascript
复制
val foo: Int = 1
foo.toDouble() // ok

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

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

The docs say

Every number类型支持以下转换:

字符集toByte():Byte

  • toShort():Short

  • toInt():Int

  • toLong():Long

  • toFloat():Float

  • toDouble():Double

  • toChar():
  • toByte()

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

代码语言:javascript
复制
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不是数字类型吗?或者是其他原因?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-04-12 00:12:50

UInt不是数字类型吗?

是的,它没有扩展Number类。

Int的声明

代码语言:javascript
复制
class Int : Number, Comparable<Int>

UInt的声明

代码语言:javascript
复制
inline class UInt : Comparable<UInt>

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

票数 17
EN

Stack Overflow用户

发布于 2019-04-12 00:13:21

根据this YouTrack request的说法,这似乎将在1.3.30中出现。

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

票数 21
EN

Stack Overflow用户

发布于 2019-04-12 18:01:44

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

此版本(More)为无符号类型和无符号类型数组带来了更多操作支持,这些数组反映了常规数字类型的操作:

代码语言:javascript
复制
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类。

代码语言:javascript
复制
/**
 * 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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55636856

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档