首页 > 解决方案 > Kotlin 将 int 转换为浮动

问题描述

我正在尝试学习 Kotlin ,我刚刚从控制台制作了一个计算器程序。我有求和、除法等功能。当我尝试将整数转换为浮点数时,我得到了这个错误:

线程“主”java.lang.ClassCastException 中的异常:java.lang.Integer 无法转换为 java.lang.Float

功能是这样的:

fun divide(a:Int,b:Int):Float{
    return a as Float / b as Float;
}

我做错了什么?

标签: kotlincasting

解决方案


为了确认其他答案,并纠正 Kotlin 中似乎常见的误解,我喜欢这样说:

强制转换不会值转换为另一种类型;强制转换向编译器保证该值已经新类型。

如果你有一个AnyNumber引用碰巧指向一个Float对象:

val myNumber: Any = 6f

然后你可以把它转换成一个浮点数:

myNumber as Float

但这仅有效,因为对象已经Float; 我们只需要告诉编译器。这不适用于另一种数字类型;以下将给出ClassCastException

myNumber as Double

转换数字,您不使用强制转换;您使用其中一种转换功能,例如:

myNumber.toDouble()

可能会出现一些混乱,因为 C 和 Java 等语言对数字类型相当松懈,并且在许多情况下执行静默转换。这可能很方便;但它也可能导致微妙的错误。对于大多数开发人员来说,低级的位旋转和计算不如 40 甚至 20 年前重要,因此 Kotlin 将一些数字特殊情况移入标准库,并且需要显式转换,从而带来额外的安全性。


推荐阅读