Kotlin比较数字时仅对比首位而非完整数值的问题如何解决
问题根因
你当前的比较逻辑是字符串字典序比较而非数值比较,Kotlin中对String类型直接使用>、<等比较运算符时,会按字符的Unicode编码逐位对比,第一位字符匹配到大小结果就会直接返回,不会转换为数值判断整体大小,这就是你遇到92236被判定大于100000的核心原因。
修复方案
- 第一步:确认数据库返回的
currentPayment的类型,如果本身是数值类型(Int、Long、Double等),只需要把EditText取出的字符串转换为同类型的数值即可 - 第二步:增加输入合法性校验,避免用户输入非数字内容导致转换崩溃
修复后的参考代码如下:
class IncreaseMoneyFragment : Fragment() { var decide = "" // 获取EditText输入值 val increaseInputStr = mIncreaseMoneyBinding.increaseEdt.text.toString() // 从数据库获取贷款还款额,此处假设为Long类型,可根据实际业务调整数值类型 val currentPayment = it.payment // 输入校验+类型转换 val increaseAmount = try { // 如果是整数金额用toLong(),有小数的话替换为toDouble()/toBigDecimal()即可 increaseInputStr.toLong() } catch (e: NumberFormatException) { // 输入非数字的异常处理,可根据业务调整逻辑 Toast.makeText(activity, "请输入合法的金额数字", Toast.LENGTH_SHORT).show() return@setOnClickListener // 根据你的实际回调逻辑调整返回位置 } if (increaseAmount > currentPayment) { Toast.makeText(activity, "more", Toast.LENGTH_SHORT).show() decide = "بیشتر" } else { Toast.makeText(activity, "less", Toast.LENGTH_SHORT).show() decide = "کمتر" } builder.setTitle(" مبلغ مورد نظر از مبلغ قسط وام $decide است. ادامه میدهید؟") }
补充说明
如果你的金额存在小数或者精度要求较高,推荐使用BigDecimal类型做转换和比较,避免浮点精度丢失问题。
内容的提问来源于stack exchange,提问作者AmirHossein
相关产品推荐
相关产品推荐

