Registriert seit: 5. Mär 2009
Ort: Hamburg
569 Beiträge
Delphi XE8 Professional
|
Extended To String mit dekadischen Einheiten
23. Jun 2009, 16:53
Hallo,
da ich bei der Suche nach einer Umwandlungsfunktion, die mir einen Extended-Wert in einen String wandelt,
und dabei auch die dekadischen (Tausender-) Einheiten angibt, nichts passendes gefunden habe, hier
meine Funktion :
Delphi-Quellcode:
// uses MATH
function ConvertValueToString(Value : Extended; Short, Eleminate : Boolean; OutString : String; accuracy : Integer): String;
Const
ExportString : array[Boolean, 1..17] of String =
(('Yokto', 'Zepto', 'Atto', 'Femto', 'Piko', 'Nano', 'Micro', 'Milli',
'', 'Kilo', 'Mega', 'Giga', 'Terra', 'Peta', 'Exa', 'Zetta', 'Yotta'),
('y', 'z', 'a', 'f', 'p', 'n', 'µ', 'm',
'', 'K', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y'));
var
Exp : Integer;
Range : Integer;
ExpStep : Extended;
begin
ExpStep := 1 / 1000;
if (accuracy < 0) or (accuracy > 18) then accuracy := 3; // set accuracy := 3 at wrong Input
if Value = 0 then // Value = 0
begin
Result := '0.000 '+OutString;
Exit;
end;
if Value < 0 then Range := -1 else Range := 1;
Exp := Trunc(ln(Value * Range) / ln(2) / 10+ ExpStep);
if (Value >= 1E25) or ((1/Value) >= 1E25)
then Result := Format('%.*f %s', [0, Value, OutString])
else
if Eleminate and (Value > -1) and (Value < 1) and (Exp > -8)
then Result := Format('%.*f %s%s', [accuracy, Value*1000 / Power(10, Exp * 3),
ExportString[Short, Exp+8], OutString])
else Result := Format('%.*f %s%s', [accuracy, Value / Power(10, Exp * 3),
ExportString[Short, Exp+9], OutString]);
end;
// konvertiert einen Extended-Wert in einen String
// Value : Wert [Extended]
// Short : True = kurze Exponententialwerte : 'K für Kilo' .... , False = Exponentialwerte ausgeschrieben
// OutString : Einheit zum Anhängen an die Ausgabe
// ausserhalb der Definitionen wird die Standard-Schreibweise zurückgegeben (Bereich: <1E-25 und >1E25)
// accuracy : 0.. 18 NachkommaStellen
// 0 wird als 0.000 und ggf. + OutString zurückgegeben
// Eliminate : True = Eliminierung der führenden Null bei -1 < Wert < 1 , aus 0,123Milli... wird 123Mikro...
Markus H.
|