Kotlin中判断输入数字为整数或小数的实现问题
在Kotlin中判断数字是整数还是小数的解决方法
报错原因
你遇到的Operator '==' cannot be applied to 'Float' and 'Int'错误,本质是类型不匹配:number01 % 1返回的是Float类型值,而0是Int类型,Kotlin不允许不同数值类型直接用==做比较。
解决方案
下面提供几种可行的解决方式:
方法1:统一比较的数值类型
把判断条件里的0改为Float类型的0.0f,让两边类型一致:
fun main(){ val number01 = readLine()!!.toFloat() if (number01 % 1.0f == 0.0f) { println("这是整数: $number01") } else { println("这是带小数的数字: $number01") } }
方法2:通过类型转换判断
将Float转换为Int后再转回Float,和原数比较,若相等则说明是整数(注意:超大数值可能存在精度丢失问题):
fun main(){ val number01 = readLine()!!.toFloat() if (number01 == number01.toInt().toFloat()) { println("这是整数: $number01") } else { println("这是带小数的数字: $number01") } }
方法3:先验证输入格式再转换
如果想避免浮点类型的精度问题,可以先以字符串读取输入,先判断是否符合整数格式,再处理:
fun main(){ val input = readLine()!! val intNumber = input.toIntOrNull() if (intNumber != null) { println("这是整数: $intNumber") } else { val floatNumber = input.toFloatOrNull() if (floatNumber != null) { println("这是带小数的数字: $floatNumber") } else { println("输入不是有效的数字") } } }
注意事项
使用Float类型时要注意精度限制,比如某些十进制小数(如0.1)无法被二进制浮点类型精确存储,若需要处理高精度的小数计算,建议使用Double或BigDecimal类型。
内容的提问来源于stack exchange,提问作者learsanin
相关产品推荐
相关产品推荐

