具有极性的Java百分比差异逻辑

时间:2017-10-05 14:49:14

标签: java

我正在尝试在两个值之间创建一个百分比差异 - 我需要a)确保所呈现的值是正确的 - 例如,如果它的+ 35%,或250%, - 25%b)解密,如果它是正面的或负面的变化

enter image description here

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?)

---这是我的逻辑正确,以获得那种显示?

2 个答案:

答案 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,如果thisPeriodlastPeriod的一半,则得到50,依此类推。

百分比更改就像您似乎已经怀疑的那样,减少了100个百分点:

thisPeriod / lastPeriod * 100 - 100

我们在这里减去100%,因为我们想要忽视上一期间已经在那里的成员。这与将更改表示为上一期间的百分比相同:

(thisPeriod - lastPeriod) / lastPeriod * 100

您认为这两种配方中哪一种更具可读性取决于您。