Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
bin noch ein totaler Anfänger, weshalb ich mich in dem Gebiet nicht auskenne.
Ich möchte zwei Werte mit einer Prozentualen Abweichung von vielleicht 15% vergleichen.
Bisher werden die Werte exakt verglichen, aber nun soll immer die erste Funktion (z.B. this.normalfunktion1()) mit der zweiten Funktion (z.B this.normalfunktion2()) übereinstimmen, falls die zweite Funktion eine abweichung von +15% und -15% hat. Wie mache ich das?
Also, die Methode "this.normalfunktion1()" und "this.normalfunktion2()" geben einen double wert aus. Sagen wir mal "this.normalfunktion1()" gibt 1.0 aus und "this.normalfunktion2()" gibt 1.5 aus.
Nun sollen beide ergebnisse der Methoden verglichen werden und nur eine Abweichung von ca. 15% besitzen -> dann ist die Aussage richtig und es folgt eine Antwort.
Bisher werden die ergebnisse der Methoden auf das Identische verglichen!
Eine zweite Möglichkeit neben dem echten Kleiner-/Größer-Vergleich ist, eine erlaubte Abweichung (Delta) zu definieren. Mathematiker bezeichnen die Abweichung von zwei Werten mit dem griechischen Kleinbuchstaben Epsilon. Wenn wir einen Vergleich von zwei Fließkommazahlen anstreben und bei einem Gleichheitsvergleich eine Toleranz mit betrachten wollen, so schreiben wir einfach:
schau mal ob du damit was anfangen kannst, ich übernehmen aber keinerlei Sicherheit falls was Rechnungstechnisches nicht stimmen sollte ^^ :
Java:
public class Foo {
public static String getDeviation(double a , double b, double range){
String result = "";
double deviation = Math.abs(a / b - 1) * 100;
if (deviation == range) {
result = String.format("Die Abweichung beträgt %.1f %% und ist somit identisch.", deviation);
}
if (deviation < range) {
result = String.format("Die Abweichung beträgt %.1f %% und liegt somit innerhalb der Range.", deviation);
}
if (deviation > range) {
result = String.format("Die Abweichung beträgt %.1f %% und liegt somit außerhalb der Range.", deviation);
}
return result;
}
public static void main(String[] args) {
System.out.println(Foo.getDeviation(1.15, 1, 1.0));
}
}
, das ist die Differenz. Die Formeln für Prozentrechnung sind:
Prozentanteil A von B = (a / b) * 100
Ist A = 1,15 und B = 1 ist A 115% von B (Abweichung um 15%). Ist A = 0,87 und B = 1 ist A 87% von B (abweichung um 13%).
Wir rechnen also mit [c]p = a / b -1[/c]. Dann kommt folgendes bei raus:
Code:
a = 1,15
b = 1
p = 0,15 (a ist 15% größer als b)
a = 0.87
b = 1
p = -0,13 (a ist 13% kleiner als b)
Weil uns ja nur die Abweichung interessiert (aber nicht, in welche Richtung!) habe ich das
Code:
Math.abs
hinzugefügt.
Java:
flaot a = ... ;
float b = ... ;
float abweichung = 0.15f; // (15%)
if (a == b) {
// a und b sind identisch
}
else if (Math.abs(a / b - 1f) <= abweichung) {
// a und b sind änlich
}
else
{
// a und b sind unterschiedlich
}