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

FDMEE中Jython的if elif条件判断结果异常排查请求

问题排查与解决:FDMEE Jython脚本条件判断异常

错误原因分析

你遇到的问题核心是字符串与数字的比较逻辑混淆了。代码里把计算出来的数字类型diff通过diff = ("%d" % diff)转换成了字符串,而字符串的比较是按字符的ASCII顺序逐位对比,不是我们直觉里的数值大小对比。

举个直观的例子:当diff是367时,转换成字符串是"367",和"90"比较时,第一个字符'3'的ASCII值小于'9',所以"367" <= "90"会被判定为True——这就是为什么明明数值是367,却错误进入了diff<=90的分支。

解决方法

只需要保留diff的整数类型,不要将其转换为字符串,直接进行数值比较即可。

修改后的完整代码

def Timetest(strField, strRecord):
    import java.util.Date as date
    import java.text.SimpleDateFormat as Sdf
    import java.lang.Exception as Ex
    import java.sql as sql
    import java.util.concurrent.TimeUnit as TimeUnit
    
    PerKey = fdmContext["PERIODKEY"]
    strDate = strRecord.split(",")[11] # 获取到期日
    strMM = strDate.split("/")[0]
    strDD = strDate.split("/")[1]
    strYYYY = strDate.split("/")[2]
    strDate = ("%s.%s.%s" % (strMM,strDD, strYYYY)) # 转换到期日格式
    sdf = Sdf("MM.dd.yyyy")
    strMRD = sdf.parse(strDate)
    
    # 计算日期差值 - 保留整数类型,不转换为字符串
    diff = (strMRD.getTime() - PerKey.getTime()) // 86400000  # 用整数除法确保结果为整数
    
    if diff >= 0:
        if diff <= 30:
            return "Mat_Up1m " + str(diff)
        elif diff <= 90:
            return "Mat_1to3m " + str(diff)
        elif diff <= 360:
            return "Mat_3to12m " + str(diff)
        elif diff <= 1800:
            return "Mat_1to5y " + str(diff)
        else:
            return "Mat_Over5y " + str(diff)

额外优化说明

  1. 把原有的diff>="0"改成数值比较diff >=0,逻辑更严谨清晰;
  2. 使用整数除法//替代普通除法/,确保diff始终是整数,避免浮点数带来的潜在比较问题;
  3. 仅在返回结果时才将diff转为字符串拼接,完全不影响条件判断的逻辑。

内容的提问来源于stack exchange,提问作者user1550192

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:40:17