kleiner Nachtrag: Log von 0 ist nicht definiert - daher sollte bei 0 kein Logarithmus berechnet werden:
Delphi-Quellcode:
Function EngineerFormat(Const F : Double;Const Digits : Byte) : String;
Var
P : Integer;
Begin
If (Abs(F) > 0.0) Then P:=Trunc(Log10(F) + 500) - 500 Else P:=0;
Result:=Format('%s*10^%d',[FloatToStrF(F / Power(10,P),ffFixed,15,Digits - 1),P]);
end;