如何用正数和负数来计算增长?

我试图用正数和负数来计算excel的百分比增长。

This Year's value: 2434 Last Year's value: -2 

我使用的公式是:

 (This_Year - Last_Year) / Last_Year =(2434 - -2) / -2 

问题是我得到一个消极的结果。 可以计算一个近似的增长数字,如果是这样的话?

你应该得到一个负面的结果 – 你被一个负数分割。 如果去年是负面的,那么你有负增长。 你可以通过除以Abs(Last Year)来避免这个exception,

你可以尝试向上移动数字空间,这样他们都变得积极。

要计算任何两个正数或负数之间的增益,您将不得不在一个增长的世界里保持一只脚,而在增长的世界里另一只脚。 你可以倾向于一边或另一边,这取决于你想如何得到结果,并且对每个select都有后果。

战略

  1. 创build一个相对于旧数字和新数字生成正数的移位方程。

  2. 添加自定义转移到旧的和新的数字来获得new_shifted和old_shifted。

  3. 采取(new_shifted – old_shifted)/ old_shifted)计算来获得收益。

例如:

 old -> new -50 -> 30 //Calculate a shift like (2*(50 + 30)) = 160 shifted_old -> shifted_new 110 -> 190 = (new-old)/old = (190-110)/110 = 72.73% 

如何select移位function

如果你的转换function将数字向上移动了很多,例如每个数字增加10000,那么你总是会有一个微小的增长/减less。 但是,如果这个转变足够大,两个数字都能进入正态,那么在边缘情况下的增长/下降就会大幅波动。 您需要拨号转换function,因此您的特定应用程序是有意义的。 这个问题没有完全正确的解决方法,你必须忍受苦甜。

把这个添加到你的Excel中,看看数字和收益是如何移动的:

  shift function old new abs_old abs_new 2*abs(old)+abs(new) shiftedold shiftednew gain -50 30 50 30 160 110 190 72.73% -50 40 50 40 180 130 220 69.23% 10 20 10 20 60 70 80 14.29% 10 30 10 30 80 90 110 22.22% 1 10 1 10 22 23 32 39.13% 1 20 1 20 42 43 62 44.19% -10 10 10 10 40 30 50 66.67% -10 20 10 20 60 50 80 60.00% 1 100 1 100 202 203 302 48.77% 1 1000 1 1000 2002 2003 3002 49.88% 

增益百分比受数字大小的影响。 上面的数字是一个不好的例子,并且是原始移位函数的结果。

你必须问问自己哪个小生物是最有收获的:

 Evaluate the growth of critters A, B, C, and D: A used to consume 0.01 units of energy and now consumes 10 units. B used to consume 500 units and now consumes 700 units. C used to consume -50 units (Producing units!) and now consumes 30 units. D used to consume -0.01 units (Producing) and now consumes -30 units (producing). 

从某种意义上说,每个小动物都是以自己的方式成为最大的种植者。 有人说B是最好的种植者,有人会说D是更大的收益。 你必须自己决定哪个更好。

问题在于,我们是否可以将这种直觉的感觉描绘成一个连续的函数,告诉我们人们往往认为“真棒增长”还是“平庸增长”。

成长一个神秘的东西

那么你必须考虑到,小动物B可能比动物D困难得多。小动物D在未来可能比其他人有更多的前景。 它有一个优势! 你如何衡量增长的opportunitydifficultyvelocityacceleration ? 为了能够预测未来,你需要直观地感受到“主要本垒打”和“生产力跛脚”的构成。

函数的一阶和二阶导数将给你“增长速度”和“增长速度”。 了解这些微积分,他们是超级重要的。

哪个越来越多? 一个正在逐渐加速增长的小动物,还是一个正在减速增长的小动物? 高低速度和高/低变化率如何? 用尽增长机会的概念呢? 成本收益分析和能力/无法利用机会。 对抗系统(你的成功来自另一个人的失败)和零和游戏呢?

有指数增长,class轮增长。 不可持续的增长。 成本效益分析和曲线拟合的数据。 世界远比我们想象的要奇怪。 绘制完美的数据线并不能告诉你下一个数据点是由于黑天鹅效应。 我build议所有的人都听这个关于增长的讲座,科罗拉多大学博尔德分校就增长,它是什么,什么不是,以及人类完全误解了这个问题做了精彩的演讲。 http://www.youtube.com/watch?v=u5iFESMAU58

一旦你认为你已经适应了一条曲线,一条黑天鹅就会发生,水沸腾了。 这个效应发生在整个宇宙中,你的原始function(新旧)不会帮助你。

下面是Java代码,它完成了大部分上述概念,它们都适合我的需求:

小动物的成长 – (一个小动物可以是“无线电波”,“甲虫”,“油温”,“股票期权”,任何东西)。

 public double evaluate_critter_growth_return_a_gain_percentage( double old_value, double new_value) throws Exception{ double abs_old = Math.abs(old_value); double abs_new = Math.abs(new_value); //This is your shift function, fool around with it and see how //It changes. Have a full battery of unit tests though before you fiddle. double biggest_absolute_value = (Math.max(abs_old, abs_new)+1)*2; if (new_value <= 0 || old_value <= 0){ new_value = new_value + (biggest_absolute_value+1); old_value = old_value + (biggest_absolute_value+1); } if (old_value == 0 || new_value == 0){ old_value+=1; new_value+=1; } if (old_value <= 0) throw new Exception("This should never happen."); if (new_value <= 0) throw new Exception("This should never happen."); return (new_value - old_value) / old_value; } 

结果

它performance得像种类似人类对生物成长有本能的感觉。 当我们的银行账户从-9000到-3000时,我们说这个增长比1000到2000年的增长要好。

 1->2 (1.0) should be bigger than 1->1 (0.0) 1->2 (1.0) should be smaller than 1->4 (3.0) 0->1 (0.2) should be smaller than 1->3 (2.0) -5-> -3 (0.25) should be smaller than -5->-1 (0.5) -5->1 (0.75) should be smaller than -5->5 (1.25) 100->200 (1.0) should be the same as 10->20 (1.0) -10->1 (0.84) should be smaller than -20->1 (0.91) -10->10 (1.53) should be smaller than -20->20 (1.73) -200->200 should not be in outer space (say more than 500%):(1.97) handle edge case 1-> -4: (-0.41) 1-> -4: (-0.42) should be bigger than 1-> -9:(-0.45) 

如果我的换classfunction对您的需求有意义,请使用它。 一定要战斗testing这个,如果你撞毁航天飞机它完全不是我的错。 这个方法是一个启发式的。

当基数小于0且当前数字大于0时,百分比增长不是一个有意义的度量:

年1年2%变化(绝对基准)
-1 10%1100
-10 10%200

上面的计算揭示了这种方法的弱点 – 如果基准年是负的,而电stream是正的,则结果是N / A

诚然,从严格的mathangular度来看,这种计算是没有意义的,但是如果我们检查财务数据,它仍然是一个有用的指标。 公式可能如下:

if(lastyear>0,(thisyear/lastyear-1),((thisyear+abs(lastyear)/abs(lastyear))

让我们用简单的数字来validation公式:

thisyear=50 lastyear=25 growth=100%是有道理的

thisyear=25 lastyear=50 growth=-50%是有道理的

thisyear=-25 lastyear=25 growth=-200%是有道理的

thisyear=50 lastyear=-25 growth=300%是有道理的

thisyear=-50 lastyear=-25 growth=-100%是有道理的

thisyear=-25 lastyear=-50 growth=50%是有道理的

再次,它可能不是math上正确的,但如果你需要有意义的数字(也许把它们插入图表或其他公式),这是一个很好的替代N / A,尤其是当使用N / A可以拧所有后续的计算。

最简单的方法是我会使用的。

 =(ThisYear - LastYear)/(ABS(LastYear)) 

但是它只适用于某些情况。 有了某些值,结果将会颠倒。

如果你想要一个与正常增长相当的增长值,那么把两者都转化为正值是没有意义的。 如果我想看到2个正数的增长,我不希望转移。

反过来说2个负数的增长是有意义的。 -1到-2在math上是100%的增长,但这种感觉是正面的,事实上,结果是下降。

所以,我有以下function,允许颠倒两个负数的增长:

 setGrowth(Quantity q1, Quantity q2, boolean fromPositiveBase) { if (q1.getValue().equals(q2.getValue())) setValue(0.0F); else if (q1.getValue() <= 0 ^ q2.getValue() <= 0) // growth makes no sense setNaN(); else if (q1.getValue() < 0 && q2.getValue() < 0) // both negative, option to invert setValue((q2.getValue() - q1.getValue()) / ((fromPositiveBase? -1: 1) * q1.getValue())); else // both positive setValue((q2.getValue() - q1.getValue()) / q1.getValue()); } 

让我画出情景。
从:-303到183,百分比变化是多less?

-303,-100%0 183,60.396%303,100%

| _________________

(183 – -303)/ | -303 | * 100 = 160.396%
总变化百分比约为160%

注:无论价值多么负数,都被视为-100%。

这些问题正在回答“我该怎么办?”的问题。 不考虑“我应该吗?”的问题 从统计学的angular度来看,一个取正值和负值的variables值的变化相当的意义不大。 对于某些variables(例如可以转换成开尔文温度的温度或者某种可以解决问题的东西),“转移”的build议可能会很好,但对于其他的则非常不利,因为消极性对方向具有确切的含义。 例如净收入或亏损。 亏损经营(负收入)在这方面具有确切的含义,正如之前的文章所暗示的那样,从这个范围从-50到30的变化在这个范围上从110到190不是完全相同的。 这些百分比变化应该很可能被报告为“NA”。

只要改变分频器绝对number.ie

  ABCD 1 25,000 50,000 75,000 200% 2 (25,000) 50,000 25,000 200% 

D2的公式是: =(C2-A2)/ABS(A2)与所有正数行相比,结果是相同的(当绝对基数相同时)。 如果没有公式中的ABS ,结果将是-200%。

佛朗哥

使用此代码:

 =IFERROR((This Year/Last Year)-1,IF(AND(D2=0,E2=0),0,1)) 

这个代码的第一部分iferror有一个负值或0值时,摆脱了N / A问题。 它通过查看e2和d2中的值来确保它们不都是0.如果它们都是0,则它将放置0%。 如果只有一个单元格为0,那么它将放置100%或-100%,具体取决于0值落在哪里。 该代码的第二部分(e2 / d2)-1与(今年 – 去年)/去年

请点击这里例如图片

我今天正在摸索答案,并认为这将工作…

(C5 <0,(B5 + ABS(C5)/ 1),IF(C5> 0,(B5 / C5)-1)))= IF(C5 = 0,B5 /

C5 =去年,B5 =今年

我们在单元格中有3个IF语句。

如果去年是0,那么今年除以1

如果去年不到0,那么今年+去年的绝对值除以1

如果去年大于0,那么今年除以去年减1

使用这个公式:

= 100%+(第2年/第1年)

逻辑是,你在第一年收回100%的负数(因此最初的100%)加上任何多余的比例将是第一年的比例。

解决这个问题的最好方法是用公式来计算斜率:

(Y1-Y2 / X1-X2)

*将x1定义为第一个时刻,那么值将是“C4 = 1”,将x2定义为第一时刻,因此值将是“C5 = 2”

为了获得正确的百分比增长,我们可以按照这个顺序:

=(((B4-B5)/(C 4 -C 5))/ ABS(B4))* 100

完美的作品!

公式应该是这个吗? :=(thisYear + IF(LastYear <0,ABS(LastYear),0))/ ABS(LastYear)-100%

IF值如果<0被添加到您的Thisyear值以生成实际差异。 如果> 0,则LastYear值为0

似乎工作在不同的情况下检查

最简单的解决scheme如下:

 =(NEW/OLD-1)*SIGN(OLD) 

如果值为负,则SIGN()函数的结果为-1如果值为正值,则结果为1 。 因此,如果以前的值为负,则乘以该值将有条件地反转结果。

短一个:

 =IF(D2>C2, ABS((D2-C2)/C2), -1*ABS((D2-C2)/C2)) 

或混淆(我的第一次尝试):

 =IF(D2>C2, IF(C2>0, (D2-C2)/C2, (D2-C2)/ABS(C2)), IF(OR(D2>0,C2>0), (D2-C2)/C2, IF(AND(D2<0, C2<0), (D2-C2)/ABS(C2), 0))) 

D2是今年,C2是去年。

 =(This Year - Last Year) / (ABS(Last Year)) 

如果今年和去年总是正数,这只能可靠地运作。

例如last_year = -50 this_year = -1。 实际上这个数字已经有了很大的提高,你会得到-100%的增长。