可能出现负数的变化率

时间:2017-09-10 12:54:52

标签: c# math decimal negative-number

我对此感到非常愚蠢,但在使用负数时,我在计算%变化方面遇到了一些问题。

当数字> 1时,使用的计算给出令人满意的结果。 0

decimal rateOfChange = (newNumber - oldNumber) / Math.Abs(oldNumber);

  1. 假设我有两个数字0.476(newNumber)和-0.016(oldNumber),增加了0.492,而计算的变化率是3 075%

  2. 如果我改为0.476(newNumber)和0.001(oldNumber),则增加0.475,我的计算将给出47%的变化率似乎是对的。

  3. 蓝线代表示例一,红线代表示例二。在我的世界蓝线应该有更大的%变化。

    在处理负数时,我如何编写此计算以给出正确的%变化?我希望它能够处理%变化的增加和减少。

    我知道这是一个数学问题,我需要处理我的数学

    Blue line is first example & Red line second example

2 个答案:

答案 0 :(得分:0)

似乎适合我。

decimal newNumber = 0.476m;
decimal oldNumber = -0.016m;
decimal increase = newNumber - oldNumber; // this is 0.492 which is true
decimal rateOfChange = increase / Math.Abs(oldNumber);

rateOfChange等于约30.75,即3075%,这是正确的变化。

第二个例子也有效。 increase是-0.475,它使rateOfChange等于-475,等于-47500%,这是正确的。

答案 1 :(得分:0)

你混合了两个概念:绝对偏差和相对偏差。

你似乎期望更大的绝对偏差意味着更大的相对偏差,这是错误的。您似乎也认为负数是您获得意外(但正确)结果的原因。

相对偏差取决于绝对偏差的大小参考值的大小,而不是其符号。您可以使用较小的绝对偏差,这意味着相对偏差非常大,反之亦然。

old value: 1
new value: 100
abs. deviation: 99
rel. deviation: 99

old value: .00001
new value: 1
abs deviation: .99999
rel deviation: 99999