【发布时间】:2019-04-11 16:06:15
【问题描述】:
考虑:
val foo: Int = 1
foo.toDouble() // ok
val bar = 2.toUInt()
bar.toDouble() // error!
这对我来说没有意义。为什么 UInt 没有toDouble? (它也没有.toFloat)。
每种数字类型都支持以下转换:
- toByte(): 字节
- toShort():短
- toInt(): 整数
- toLong(): 长
- toFloat(): 浮点数
- toDouble(): 双倍
- 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 不被视为数字类型吗?还是别的什么?
【问题讨论】:
-
可能相关:某些体系结构(尤其是 x86)没有将无符号整数转换为浮点的本机机器指令,只有有符号。 (AVX512 最终为 x86 添加了该功能,但它仍然没有被广泛使用并且非常远未成为基线)。如果可能的话,零扩展为更广泛的有符号整数类型是迄今为止最简单的 unsigned->float 或 double 实现,但对于 64 位无符号整数,您需要特殊技巧。也许 Kotlin 想避免这种情况?但考虑到它运行在 JVM 或 Javascript 之上,也许还有别的东西。
-
@PeterCordes 我怀疑任何语言都希望将自己限制在单一架构的缺点上。我的意思是即使 C 也允许这样做 :) 但是有趣的信息,谢谢。
标签: kotlin