Maximo自动化脚本小数点

2024-05-12 20:11:48 发布

您现在位置:Python中文网/ 问答频道 /正文

嗨,我有一个关于状态的问题。示例: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)

Tags: iffloatsumsetvaluelinecostmbogetmbosettotbasecost1
2条回答

Python执行类型强制,这可能是您的问题。如果有0(一个整数)的比较或赋值,请尝试使用0.0(一个浮点数)。在

使用psdi.util.MXMath类执行成本计算,因为它在幕后使用BigDecimal。 请看这个entry以了解不使用浮点数/双精度数进行货币计算的原因。在

另外,正如Dex所指出的,您应该在mboSet上使用isEmpty()方法来确定是否获取记录。在

相关问题 更多 >