我对此感到非常愚蠢,但在使用负数时,我在计算%变化方面遇到了一些问题。
当数字> 1时,使用的计算给出令人满意的结果。 0
decimal rateOfChange = (newNumber - oldNumber) / Math.Abs(oldNumber);
答案 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