kotlin - 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;
}
我做错了什么?
解决方案
为了确认其他答案,并纠正 Kotlin 中似乎常见的误解,我喜欢这样说:
强制转换不会将值转换为另一种类型;强制转换向编译器保证该值已经是新类型。
如果你有一个Any
或Number
引用碰巧指向一个Float
对象:
val myNumber: Any = 6f
然后你可以把它转换成一个浮点数:
myNumber as Float
但这仅有效,因为对象已经是Float
; 我们只需要告诉编译器。这不适用于另一种数字类型;以下将给出ClassCastException
:
myNumber as Double
要转换数字,您不使用强制转换;您使用其中一种转换功能,例如:
myNumber.toDouble()
可能会出现一些混乱,因为 C 和 Java 等语言对数字类型相当松懈,并且在许多情况下执行静默转换。这可能很方便;但它也可能导致微妙的错误。对于大多数开发人员来说,低级的位旋转和计算不如 40 甚至 20 年前重要,因此 Kotlin 将一些数字特殊情况移入标准库,并且需要显式转换,从而带来额外的安全性。
推荐阅读
- angular - 传递订阅数据方法的Angular4在孩子中失败
- c# - 当智能表单字段为空时如何隐藏元素
- ios - ARKit - 最初在 ARSKView 中以某个航向/角度从相机放置对象
- ess - Emacs ESS 错误 ess-toggle-S-assign 错误数量的参数
- javascript - 将 GraphicsMagic 与生成器功能和产量一起使用
- sql - Microsoft Access 查询以检索看似不可能的条件的随机事务
- javascript - 从 Google 跟踪代码管理器自定义 html 标记访问窗口上的值
- openlayers - 无法将 topojson 对象加载为 openlayers 层
- csv - Jmeter 为每个采样器使用不同的 CSV
- d3.js - d3 中的跳跃式转换强制有向图