You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 20:15:00