deine etwas "ungerechtere" und schnellere Variante könnte man in Delphi auch recht kurz gestalten
Delphi-Quellcode:
Uses Types, Math;
Function RoundedPercentage(Const Values: Array of Integer): TIntegerDynArray;
Var i, i2: Integer;
Begin
SetLength(Result, Length(Values));
i2 := SumInt(Values);
//For i := 0 to High(Values) do Result[i] := Round(Values[i] / i2 * 100);
For i := 0 to High(Values) do Result[i] := (Values[i] * 100 + i2 shr 1) div i2;
Inc(Result[High(Result)], 100 - SumInt(Result));
End;
Code:
15.45 15.45 15.45 15.45 15.45 15.45 7.30
15 15 15 16 16 16 7 // version 1
15 15 15 15 15 15 10 // version 2, also die Jetzige