2012-09-19 253 views
1

我想获得一些工作,我正在为我的工作建立一个表单,它似乎没有按照我期望的方式工作。以下是当前的代码。我想计算两个字段ANL_CMA1_NUM_CLOSED_SALES和ANL_CMA2_NUM_CLOSED_SALES之间的差异百分比。我认为我的数学是正确的,但我只得到一位数的结果,无论是正面还是负面取决于输入值。我正在制定一个表格,我可以自定义权限级别和四舍五入,并且我正在将其四舍五入到最接近的百分之一。任何人都可以帮我解决这个问题吗?最初的公式没有“-100)* 100)”部分,但也没有正常工作。计算百分比差异python

FormSet.SetFieldValue(CurrentForm, "ANL_CHG_NUM_CLOSED_SALES", 
(((FormSet.GetFieldValue(CurrentForm, "ANL_CMA2_NUM_CLOSED_SALES") - 
FormSet.GetFieldValue(CurrentForm, "ANL_CMA1_NUM_CLOSED_SALES"))/ 
FormSet.GetFieldValue(CurrentForm, "ANL_CMA1_NUM_CLOSED_SALES")) -100) * 100) 
+0

仅供参考 - 我不约让所有阳性结果护理,负数都OK了。 – wondergoat77

+0

为什么我得到这个投票呢? – wondergoat77

回答

8

您可能使用整数除法(即1/3 == 0),你需要的浮点除法(即1./3 == 0.3333333)。

这也可能是更容易,如果你打破它一点理解 -

cma1 = FormSet.GetFieldValue(CurrentForm, "ANL_CMA1_NUM_CLOSED_SALES") 
cma2 = FormSet.GetFieldValue(CurrentForm, "ANL_CMA2_NUM_CLOSED_SALES") 
delta = float(cma2 - cma1)/cma1 
FormSet.SetFieldValue(CurrentForm, "ANL_CHG_NUM_CLOSED_SALES", delta*100.0) 
+0

确实有道理!为什么我没有想到这个!?即时通讯仍然是非常新的python,并忘记数字如何工作!谢谢 – wondergoat77

1

您需要的值转换为float为了得到浮点除法(否则,Python做整数除法这截断结果为一个整数)。

使用临时变量的理智:

cma1_closed_sales = FormSet.GetFieldValue(CurrentForm, "ANL_CMA1_NUM_CLOSED_SALES") 
cma2_closed_sales = FormSet.GetFieldValue(CurrentForm, "ANL_CMA2_NUM_CLOSED_SALES") 
pct_change = 100.0 * (cma2_closed_sales - cma1_closed_sales)/float(cma1_closed_sales) 
FormSet.SetFieldValue(CurrentForm, "ANL_CHG_NUM_CLOSED_SALES", pct_change) 
+0

感谢您的帮助 – wondergoat77