Dziwnie to wygląda. Masz przykład funkcji konwertujących we Free Pascalu – sprawdź czy w Delphi zadziała:
function DoubleToString(const AValue: Double): String; inline;
var
Cast: Int64 absolute AValue;
begin
Result := '$' + HexStr(Cast, SizeOf(Cast) * 2);
end;
function StringToDouble(const AValue: String): Double; inline;
var
Cast: Int64 absolute Result;
Dummy: Integer;
begin
Val(AValue, Cast, Dummy);
end;
Test użycia:
var
ValueAsString: String;
ValueAsDouble: Double = Pi;
begin
WriteLn('Double: "', ValueAsDouble:2:16, '"');
ValueAsString := DoubleToString(ValueAsDouble);
WriteLn('String: "', ValueAsString, '"');
ValueAsDouble := 0;
WriteLn('Double: "', ValueAsDouble:2:16, '"');
ValueAsDouble := StringToDouble(ValueAsString);
WriteLn('Double: "', ValueAsDouble:2:16, '"');
end.
I wyjście konsoli:
Double: "3.1415926535897931" // wartość początkowa – tutaj Pi
String: "$400921FB54442D18" // ciąg znaków po konwersji liczby zmiennoprzecinkowej
Double: "0.0000000000000000" // wyzerowana wartość (żeby nie było że optymalizator wyciął numer)
Double: "3.1415926535897931" // wartość po konwersji ciągu na liczbę zmiennoprzecinkową
Perfekcyjne odwzorowanie poprzedniego stanu.