da die Abbruchbedingung der Funktion falsch ist, wenn sich in keine kleinere Einheit mehr umrechnen lässt, hier eine korrekte Version:
Delphi-Quellcode:
function xFloatToSym(Value : Extended) :
String;
const
S_UNITS = '
afpnµm kMGTP';
var Wert: Extended;
Einheit : Integer;
begin
wert := Value;
Einheit := 7;
while ( wert < 1 )
and (Einheit > 1)
do begin
Wert := Wert * 1000;
dec(Einheit);
end;
while (Wert >= 1000)
and (Einheit < 12)
do begin
Wert := Wert / 1000;
inc(Einheit)
end;
Result := Format('
%g%s', [Wert, S_Units[Einheit]]);
end;
// xFloatToSym
Delphi-Quellcode:
st := FloatToSym(0.00000000000002);
Showmessage(st);
st := xFloatToSym(0.00000000000002);
Showmessage(st);
st := FloatToSym(1000000000000000000);
Showmessage(st);
st := xFloatToSym(1000000000000000000);
Showmessage(st);
st := FloatToSym(0.00000000000000000001);
Showmessage(st);
st := xFloatToSym(0.00000000000000000001);
Showmessage(st);
Phantasie ist etwas, was sich manche Leute gar nicht vorstellen können.