8

我正在尝试用正数和负数计算 excel 中的百分比增长。

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

我使用的公式是:

(This_Year - Last_Year) / Last_Year

=(2434 - -2) / -2

问题是我得到了否定的结果。可以计算一个近似的增长数吗?如果可以,如何计算?

4

19 回答 19

16

您可以尝试将数字空间向上移动,使它们都变为正数。

要计算任何两个正数或负数之间的增益,您将不得不将一只脚放在幅度增长的世界中,另一只脚放在数量增长的世界中。您可以根据您希望结果收益的显示方式向一侧或另一侧倾斜,并且每个选择都会产生后果。

战略

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

  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%

如何选择移位功能

如果您的移位函数将数字向上移动得太远,例如向每个数字添加 10000,您总是会得到微小的增长/下降。但是,如果这种转变足以让这两个数字都进入正值区域,那么边缘情况的增长/下降就会出现剧烈波动。您需要拨入换档功能,以便对您的特定应用程序有意义。这个问题没有完全正确的解决方案,你必须先吃苦后甜。

将此添加到您的 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 在未来可能比其他小动物有更多的前景。它有一个优势!您如何衡量增长的opportunitydifficulty和?为了能够预测未来,您需要对什么构成“大本垒打”和“生产力的蹩脚进步”有一个直观的感觉。velocityacceleration

函数的一阶和二阶导数将为您提供“增长速度”和“增长加速度”。了解微积分中的那些,它们非常重要。

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

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

将一条线拟合到热水的温度,一旦你认为你已经拟合了一条曲线,就会出现一只黑天鹅,水就会沸腾。这种效应发生在我们整个宇宙中,你的原始功能(新旧)/旧不会帮助你。

下面是 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;
    
    
}

结果

它的行为有点像人类对小动物生长有一种本能的感觉。当我们的银行账户从 -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)
于 2013-08-23T05:45:16.637 回答
7

最简单的解决方案如下:

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

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

于 2016-10-20T12:28:05.497 回答
6

Percentage growth is not a meaningful measure when the base is less than 0 and the current figure is greater than 0:

Yr 1 Yr 2 % Change (abs val base)
-1 10 %1100
-10 10 %200

The above calc reveals the weakness in this measure- if the base year is negative and current is positive, result is N/A

于 2013-06-14T19:51:32.987 回答
3

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

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

让我们用简单的数字凭经验验证公式:

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%说得通

同样,它在数学上可能不正确,但是如果您需要有意义的数字(可能将它们插入图表或其他公式中),它是 N/A 的一个很好的替代方案,特别是当使用 N/A 可能会破坏所有后续计算时。

于 2016-04-10T05:32:05.860 回答
1

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

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

|_________________ ||||||||||||||||||||||||________|

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

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

于 2014-10-02T08:51:48.263 回答
1

你应该得到一个否定的结果——你除以一个负数。如果去年是负数,那么你就有负增长。您可以通过除以来避免这种异常情况Abs(Last Year)

于 2012-09-20T14:42:53.193 回答
1

解决此问题的最佳方法是使用公式计算斜率:

(y1-y2/x1-x2)

* 定义 x1 为一阶矩,所以值为 "C4=1" 定义 x2 为一阶矩,所以值为 "C5=2"

为了获得正确的百分比增长,我们可以遵循以下顺序:

=(((B4-B5)/(C4-C5))/ABS(B4))*100

完美的作品!

于 2016-08-04T00:30:21.673 回答
0

这些问题正在回答“我应该怎么做?”的问题。不考虑“我应该吗?”这个问题 从统计学上讲,采用正值和负值的变量值的变化意义不大。“转变”的建议可能对某些变量有效(例如,可以转变为开尔文标度的温度或解决问题的东西),但对于其他变量则非常糟糕,因为负性对方向有精确的影响。例如净收入或损失。在这种情况下,亏损经营(负收入)具有精确的含义,在这种情况下,从 -50 移动到 30 与从 110 移动到 190 完全不同,正如前一篇文章所暗示的那样。这些百分比变化最有可能报告为“NA”。

于 2015-02-26T16:55:08.890 回答
0

如果您想要一个与正常增长相当的增长值作为两个正数的结果,那么将两者都转变为正数确实没有意义。如果我想看到 2 个正数的增长,我不希望发生变化。

然而,反转 2 个负数的增长是有意义的。-1 到 -2 在数学上是 100% 的增长,但这感觉是积极的,事实上,结果是下降。

所以,我有以下功能,允许反转 2 个负数的增长:

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());
}
于 2014-09-13T10:07:01.797 回答
0

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

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

但是,它仅在某些情况下有效。对于某些值,结果将被反转。

于 2014-01-30T16:04:45.127 回答
0

只需将分隔符更改为绝对数字即可。即

        A          B           C         D
1    25,000      50,000      75,000     200%

2   (25,000)     50,000      25,000     200%

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

佛朗哥

于 2015-07-01T11:30:28.647 回答
0

本文详细解释了 (b - a)/ABS(a) 公式为何有意义。一开始它是违反直觉的,但是一旦你使用了底层的算术,它就开始变得有意义了。当你最终习惯它时,它会改变你看待百分比的方式。

于 2021-01-16T01:16:15.810 回答
0

目标是获得增长率。思路如下:首先计算绝对增加值。然后绝对增加值加到今年和去年的值中。然后根据新值计算增长率。例如:

LastYear | ThisYear | AbsoluteIncrease | LastYear01 | ThisYear01 | Rate
  -10    | 20       |  30 = (10+20)    | 20=(-10+30)| 50=(20+30) | 2.5=50/20    
  -20    | 20       |  40 = (20+20)    | 20=(-20+40)| 60=(20+40) | 3=60/2
于 2022-01-12T04:16:27.307 回答
0

使用此代码:

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

当存在负值或 0 值时,此代码的第一部分iferror消除了N/A问题。它通过查看 e2 和 d2 中的值来做到这一点,并确保它们不都是 0。如果它们都是 0,那么它将放置 0%。如果只有一个单元格是 0,那么它将放置 100% 或 -100%,具体取决于 0 值落在哪里。此代码的第二部分 (e2/d2)-1 与 (this year - lastyear)/Last year 相同的代码

请点击这里查看示例图片

于 2015-11-03T14:15:21.440 回答
0

使用这个公式:

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

逻辑是您在第 1 年收回 100% 的负数(因此最初是 100%)加上任何超额将是与第 1 年的比率。

于 2016-03-30T14:20:29.300 回答
0

短一:

=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是去年。

于 2017-08-10T14:21:26.690 回答
0

公式应该是这个:

=(thisYear+IF(LastYear<0,ABS(LastYear),0))/ABS(LastYear)-100%

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

如果 > 0,则 LastYear 值为 0

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

于 2016-08-24T07:41:55.703 回答
0

我今天正在摸索答案,并认为这会奏效......

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

C5 = 去年,B5 = 今年

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

如果去年为 0,则今年除以 1

如果 Last Year 小于 0,则 This Year + Last Year 的绝对值除以 1

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

于 2015-11-06T21:27:16.747 回答
-1
=(This Year - Last Year) / (ABS(Last Year))

这只有在今年和去年总是正数的情况下才能可靠地工作。

例如 last_year=-50 this_year = -1。事实上,这些数字已经有了很大的改善,你得到了 -100% 的增长。

于 2013-05-02T16:04:00.117 回答