если elif (условия) в Jython FDMEE продолжает давать неверный результат - PullRequest
0 голосов
/ 31 мая 2018

это должно быть просто, если elif (условия) в jython, но похоже, что Jython в FDMEE продолжает проверять неверный результат в условии.

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]  

    #get maturity date  
    strMM = strDate.split("/")[0]  
    strDD = strDate.split("/")[1]  
    strYYYY = strDate.split("/")[2]  
    strDate = ("%s.%s.%s" % (strMM,strDD, strYYYY))  
    #converting Maturity date   
    sdf = Sdf("MM.dd.yyyy")  
    strMRD = sdf.parse(strDate)  
    #calc date diff  
    diff = (strMRD.getTime()- PerKey.getTime())/86400000  
    diff = ("%d" % diff)  
    if diff>="0":  
        if diff <= "30":  
            return  "Mat_Up1m " + diff  
    elif diff <= "90":  
        return "Mat_1to3m " + diff #the result goes here all the time although my diff is 367  
    elif diff <= "360":  
        return  "Mat_3to12m " + diff   
    elif diff <= "1800":  
        return "Mat_1to5y " + diff  #the result supposed to go here  
    else:  
        return  "Mat_Over5y "+ diff  

Не уверен, почему он продолжает идти ко второмуэлиф вместо четвертого элифа.

Мой результат вычисления diff = 367

есть идеи, как сделать так, чтобы мой код читал правильное условие if elif?

1 Ответ

0 голосов
/ 07 июня 2018

Надеюсь, вы уже разобрались, если нет, то проверьте ошибки, которые вы допустили в вашем скрипте.

  • В вашем скрипте вы сравниваете строку "367" со значениями строки "0", "90" и т. Д., Это не integer comparison, строка "367" всегда меньше, чем строка "90", поэтому она входит в это условие элифа.
  • Теперь вам нужно выполнить integer comparison instead of string comparison, а также переместитьвсе ваши elif условия внутри основного условия if.
  • В операторе возврата вам нужно преобразовать interger to string для объединения diff в строку.

Проверьте следующий кодсо всеми изменениями.

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) 
...