我正在尝试在两个值之间创建一个百分比差异 - 我需要a)确保所呈现的值是正确的 - 例如,如果它的+ 35%,或250%, - 25%b)解密,如果它是正面的或负面的变化
float thisPeriod = 10;
float lastPeriod = 8;
float percentage = (float) (thisPeriod/lastPeriod) * 100;
System.out.println("percentage " + percentage);
String polarity = BasicUtils.checkPolarity(percentage);
System.out.println("polarity " + polarity);
public static String checkPolarity(float difference){
if(difference == 100) return "positive";
if(difference < 100){
return "negative";
}else {
return "positive";
}
}
- 情景1 这个时期 - 10名成员 上一期 - 8名成员
So there is a +25% difference. (125-100?)
- 情景2 这个时期--20名成员 上一期 - 15名成员
So there is a 33% difference. (133-100?)
- 场景3 这个时期--20名成员 上一期 - 10名成员
So there is a +200% difference. -- but then shouldn't this be 100% difference (200-100?)
- 情景4 这个时期 - 40名成员 上一期 - 10名成员
So there is a +400% difference. -- but then shouldn't this be 300% difference (400-100?)
---这是我的逻辑正确,以获得那种显示?
答案 0 :(得分:0)
你的逻辑似乎有点过时了。如果您希望百分比相对于之前的值发生变化,我认为它应该是difference / old_value
:
public static String percentageChange(double last, double now) {
double delta = now - last;
double change = delta / last;
return String.format("%+.2f%%", change * 100);
}
示例:
percentageChange( 8, 10); // +25.00%
percentageChange(15, 10); // -33.33%
percentageChange(10, 30); // +200.00%
答案 1 :(得分:0)
表示为上一期间百分比的当前期间始终为
thisPeriod / lastPeriod * 100
因此,如果thisPeriod == lastPeriod
那么这是100,如果thisPeriod
是lastPeriod
的一半,则得到50,依此类推。
百分比更改就像您似乎已经怀疑的那样,减少了100个百分点:
thisPeriod / lastPeriod * 100 - 100
我们在这里减去100%,因为我们想要忽视上一期间已经在那里的成员。这与将更改表示为上一期间的百分比相同:
(thisPeriod - lastPeriod) / lastPeriod * 100
您认为这两种配方中哪一种更具可读性取决于您。