Registriert seit: 17. Nov 2005
Ort: Hamburg
1.058 Beiträge
Delphi XE2 Professional
|
AW: Extended To String mit dekadischen Einheiten
21. Mär 2016, 04:12
Moin.
eine etwas überarbeitete Version :
Delphi-Quellcode:
// Value : Wert [Extended]
// Short : True = kurze Exponententialwerte : 'K für Kilo' .... , False = Exponentialwerte ausgeschrieben
// OutString : Einheit zum Anhängen an die Ausgabe
// Accuracy : Genauigkeit
// Digits : NachkommaStellen
// Eliminate : True = Eliminierung der führenden Null bei -1 < Wert < 1 , aus 0,123Milli... wird 123Mikro..
function FloatToStrS(Value : Extended; Short, Eleminate : Boolean; OutString : String; Accuracy, Digits : 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;
ExpStep : Extended;
begin
Result := ' 0' + ' ' + OutString;
ExpStep := 1/1000;
Exp := 0;
if Value <> 0 then
begin
Exp := Trunc(ln(Value) / ln(2) / 10 + ExpStep);
if ((Eleminate) and (Value > -1) and (Value < 1)) then Dec(Exp, 1);
Value := Value / Power(10, Exp * 3);
end
else Value := 0;
Result := FloatToStrF(Value, ffNumber, accuracy, digits) + ' ' + ExportString[Short, Exp+9] + OutString;
end;
Was fehlt, ist die Prüfung, ob Value innerhalb des verarbeitbaren Bereiches liegt.
Zum Beispiel bei S:=FloatToStrS(1e50,False,False,'',10,5);
gibt deine Funktion 100.000000 m zurück.
Und: "Terra" sollte "Tera" heißen, und die korrekte Kurzform für "Kilo" ist "k", nicht "K"
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
|