Mathe-Rundung Ausgabe insgesamt 100%

8

Ich habe 3 Werte, die alle auf keine Dezimalstellen gerundet werden (dh 5%, 25%, 70%), außer dass meine 70% wirklich 70,6% sind, also 71%, was insgesamt 5% ergibt, 25%, 71% = 101%, was nicht gut ist, besonders weil ich ein Balkendiagramm habe, das, wenn es über 100% Breite geht, wirklich durcheinander gerät.

Wie kann ich sicherstellen, dass meine 3 Werte niemals mehr als 100% betragen? gerade im im mit Math.Round (Wert, 0) gibt es irgendwelche Schalter / Optionen, die ich verwenden kann, um meine Summe meiner 3 Werte von über 100% zu halten?

Danke

    
tap 09.02.2012, 20:51
quelle

8 Antworten

11

Wenn die drei Werte immer 100 ergeben müssen, dann runden Sie nur zwei der Werte und berechnen Sie die dritte mit

%Vor%

Hinweis: Ihr Ergebnis könnte auch zu klein sein. Wenn Sie drei Werte haben, die 33,333333 sind, ergibt das Runden und Hinzufügen von ihnen 99!

BEARBEITEN (als Antwort auf @ BlueRajaDannyPflughoef's Kommentar)

Wenn Sie viele Werte haben, kann die Summe aller Rundungsfehler groß werden. Daher wäre es keine gute Idee, es auf den letzten Wert zu verschieben. Für diese Fälle schlage ich eine kontinuierliche Rundung vor.

%Vor%

Es ist nicht perfekt, jedoch sollte der Fehler niemals 1% überschreiten. Hier ist ein anderes Beispiel

%Vor%     
Olivier Jacot-Descombes 09.02.2012 20:55
quelle
5

Fügen Sie keine gerundeten Werte hinzu und erwarten Sie, dass etwas Sinnvolles entsteht. Fügen Sie die nicht gerundeten Werte hinzu. Wenn das nicht das tut, was Sie wollen, müssen Sie erklären, was Sie denken, indem Sie abgerundete Werte hinzufügen.

    
Dour High Arch 09.02.2012 21:01
quelle
2

Wenn es Ihnen nichts ausmacht, dass die Werte zu kleiner als 100 summieren, besteht die einfache Lösung darin, Math.Floor durchgängig zu verwenden.

Es wird interessanter, wenn du auf / abrunden willst und das Ergebnis genau 100 ist. Hier ist eine Herangehensweise - runde sie alle ab, dann runde sie selektiv den größten Bruch zuerst, bis du wieder 100 erreichst:

%Vor%     
Matthew Strawbridge 09.02.2012 23:55
quelle
1

Kannst du am Ende einfach so einen Check machen:

%Vor%     
Oleksi 09.02.2012 20:53
quelle
1

Nun, wenn Sie nicht runden, dann werden sie alle zu 100% addieren. Verwenden Sie Floats / Doubles / Dezimalzahlen. Problem gelöst.

Schließlich, warum sollten Sie Ihre Genauigkeit verringern wollen? - was übrigens die Rundung ist.

    
Zenexer 09.02.2012 21:03
quelle
0

Es ist wahrscheinlich das Beste, auf allen Konten abzurunden und dann das verbleibende Guthaben als "statistische Rundung" oder etwas Ähnliches zu haben.

    
m-y 09.02.2012 20:59
quelle
0

Warum nicht alle drei Werte zusammenfügen, dann um das Endergebnis? 33,3 + 33,3 + 33,3 = 99,9, die dann auf 100 Runden gerundet werden und einzeln abgerundet werden, würde nur bei 99 erscheinen, da jede Runde abgerundet würde.

    
harag 10.02.2012 09:50
quelle
0

Dieses Problem trat bei mir auf, als ich Daten in ein System importieren musste, das ganzzahlige Prozentsätze für die Menge der zu jedem Benutzer gehörenden Zeilen benötigte, um genau hundert hinzuzufügen.

Es ist wichtig zu erkennen, dass es keinen "richtigen" Weg gibt, dies zu tun. Geben Sie beispielsweise drei Werte an, die jeweils 1/3 entsprechen und eine gerundete Summe von 99 haben, wobei der Wert 1 addiert werden sollte, um die Summe auf 100 zu setzen. Es gibt keine richtige Antwort. Wählen Sie einfach einen.

Hier ist meine Lösung in PHP:

%Vor%     
Tom 14.09.2012 04:32
quelle

Tags und Links