如何解决解决Kotlin中BigDecimal的错误“无法解析的参考由于接收器类型不匹配,以下候选者均不适用”
我正在Android Kotlin中进行
val simpleInterest = ((num1*num2)*num3)/100
但是它说 未解决的参考。由于接收器类型不匹配,以下候选者都不适用: 公共内联运算符fun BigDecimal.times(other:BigDecimal):在kotlin中定义的BigDecimal 公共内联运算符fun BigInteger.times(其他:BigInteger):Kotlin中定义的BigInteger
实际上我的代码是:
fun onSimpleInterest(view: View) {
val str:String = txtDisplay.text.toString()
val sp = arrayOf(str.split("[*+\\-\\/]".toRegex(),3))
val num1 = sp[0]
val num2 = sp[1]
val num3 = sp[2]
val simpleInterest = ((num1*num2)*num3)/100
buttonSI.setOnClickListener {
txtDisplay.text = simpleInterest
}
}
解决方法
这里发生的事情。
扩展split
返回一个列表。因此sp
实际上是一个列表数组。
由于sp的类型是列表数组,因此对其进行索引(val num1 = sp[0]
等)实际上是返回列表,而不是字符串。因此num1,num2和num3实际上是List<String>
。
您需要做的是摆脱arrayOf并将sp设置为str.split的结果。 Sp现在将成为一个列表,因此您可以将num1,num2和num3设置为适当的索引(即字符串)。
接下来,将这些字符串转换为Ints,然后就可以进行算术了。
最后,simpleInterest
是一个Int,但是我很确定txtDisplay
将期望使用CharSequence,因此请将Int转换回字符串。
解决方案:
fun onSimpleInterest(view: View) {
val str:String = txtDisplay.text.toString()
val sp = str.split("[*+\\-\\/]".toRegex(),3)
val num1 = sp[0].toInt() // Possible Exceptions
val num2 = sp[1].toInt()
val num3 = sp[2].toInt()
val simpleInterest = ((num1*num2)*num3)/100
buttonSI.setOnClickListener {
txtDisplay.text = simpleInterest.toString()
}
}
注意:这里有很多实例可能引发您没有捕获和处理的异常。
如果用户键入的元素少于3个,则split返回的List的大小将小于3。因此,对其进行索引(sp[1]
等)可能会返回IndexOutOfBoundsException。
在同一行上,即使用户键入3个或更多元素,这些元素也可能不是整数。在这种情况下,尝试将它们转换为Ints可能会返回NumberFormatException。
您应该处理这些可能性。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。