So sieht mein Versuch aus. Alles was über 1 TiB hinaus geht, kann ich verwerfen.
Delphi-Quellcode:
function CalculateSize(Bytes, Multiplier: Int64): UInt64;
const
MaxSize: Int64 = 1099511627776; // 1 TiB
var
dTmp: Double;
begin
if Multiplier > 0 then
dTmp := System.Math.Power(1024, Multiplier)
else
dTmp := 1;
dTmp := Bytes * dTmp;
if dTmp > MaxSize then
dTmp := MaxSize;
Result := Round(dTmp); // Round um von Double auf Int64 zu kommen [ob Round oder Trunc ist ja egal]
end;
CalculateSize übergebe ich beispielsweise 305 und 2 übergebe, bekomme ich als Ergebnis 305 MiB.
Alles was über 1 TiB geht wird verworfen.
Das macht genau das was ich brauche.