Maximo - скрипт автоматизации - десятичные точки

Привет, у меня проблема со статусом. Образец: availBudget = 1000,00 и totBaseCost = 1000,01, это должно быть БЕЗ БЮДЖЕТА, но я думаю, что он получает только целое число.

totBaseCost = mbo.getDouble("TOTALBASECOST")
totBaseCost1 = "%.2f" % float(totBaseCost)
#totBaseCost1 = "%.2f" % totBaseCost
budgetSet = mbo.getMboSet("BUDGET")
availBudget = 0
if budgetSet is not None:
    budgetMbo = budgetSet.getMbo(0)
    totBudgetAmount = budgetMbo.getFloat("C1BUDTOTCOST")
    estTotCost = budgetMbo.getMboSet("C1ESTTOTCOSE").sum("LINECOST")
    comTotCost = budgetMbo.getMboSet("C1COMMITTED").sum("LINECOST")
    actTotCost = budgetMbo.getMboSet("C1ACTTOTCOST").sum("LINECOST")

    #Available Budget
    availBudget = float(totBudgetAmount) - float(estTotCost) - float(comTotCost) - float(actTotCost)

    availBudget = "%.3f" % availBudget
    if availBudget < 0:
        availBudget = abs(availBudget)

    if (totBaseCost1) > availBudget and availBudget <> 0:
        mbo.setValue("C1BUDGETSTATUS","",11L)
        mbo.setValue("C1BUDGETSTATUS","UNBUDGETED",11L)
    elif (totBaseCost1) <= availBudget:
        mbo.setValue("C1BUDGETSTATUS","",11L)
        mbo.setValue("C1BUDGETSTATUS","BUDGETED",11L)
    elif str(totBaseCost1) == "0.00" and str(availBudget) <> "0.00":
        mbo.setValue("C1BUDGETSTATUS","",11L)
        mbo.setValue("C1BUDGETSTATUS","BUDGETED",11L)

person DIANA ROSE ARNAIZ    schedule 13.03.2019    source источник
comment
Кстати, я думаю, что getMboSet всегда возвращает набор. В этом наборе может не быть записей MBO, но он всегда будет существовать. Это будет означать, что ifbudgetSet is not None: ничего не делает, и вы все равно можете получить исключение нулевого указателя/исключение NoneType в строке BudgetMbo.getFloat(C1BUDTOTCOST), если набор был пуст. Это, вероятно, должно быть, если не BudgetSet.isEmpty(): или BudgetMbo = BudgetSet.getMbo(0) и если BudgetMbo не None:   -  person Dex    schedule 14.03.2019


Ответы (2)


Python действительно принуждает тип, и это может быть вашей проблемой. Если у вас есть сравнения или присваивания 0 (целое число), попробуйте вместо этого использовать 0.0 (число с плавающей запятой).

person Preacher    schedule 14.03.2019

Используйте psdi. util.MXMath для расчета стоимости, поскольку он использует BigDecimal за кулисами. Посмотрите на эту запись по причинам, по которым не используются числа с плавающей запятой. / удваивается для денежных расчетов.

Кроме того, как указал Декс, вы должны использовать метод isEmpty() в mboSet, чтобы определить, получаете ли вы записи или нет.

person JPTremblay    schedule 19.03.2019