Witam.
Nie mogę znaleźć jak konwertować liczbę z String na Extended by nie zaokrąglało ja tzn 0,90274961 to żeby taka była a nie 0,90
0
0
Jeżeli ucina Tobie taką liczbę to znaczy, że może ustawienia kompilatora dla Delphi na to jakoś wpływają albo ustawienia regionalne, bo pod Delphi 7 taki kod jak poniżej pokazuje całą liczbę. Są inne funkcje pozwalające formatować ilość liczb po przecinku:
var
E : Extended;
begin
E := 0.90274961;
ShowMessage(FloatToStr(E));
end;
Pod WinAPI natomiast stosowałem takie rozwiązanie, bo sprintf nie formatuje floatów. Poniższy kod pokaże 3 miejsca po przecinku, ale nie problem powiązać sobie te funkcję na przykłąd ze sprintf albo IntToStr i dzięki temu "regulować" ilośc cyfr po przecinku dodatkowym parametrem przekazywanym do funkcji:
//...
function sprintf(S : PAnsiChar; const Format : PAnsiChar) : integer; cdecl;
varargs; external 'msvcrt.dll';
function FloatToStr(F : Double) : string;
var
S : PChar;
L : integer;
begin
GetMem(S, 99);
sprintf(PChar(S), '%.3f', F);
Result := S;
L := Length(Result);
while Result[L] <= '0' do
begin
L := L - 1;
end;
Result := Copy(Result, 1, L);
end;
//...
0
var S:String;
s:=FormatFloat('0.000000',0.94589736);
0
olesio pomieszałeś wejściowa jest string np 0,90274961 a wyjściową Extended i StrToFloat zaokrągla mi do 0,90
1
Przeanalizuj to:
uses SysUtils;
const v:Extended=0.90274961;
var x:Extended;
begin
x:=StrToFloat('0.90274961'); // przecinek czy kropka z ustawień windows;
if (v-1E-12<x)and(x<v+1E-12) then WriteLn('@proqix bzdury gada o zaokragleniu przez StrToFloat');
if x=v then WriteLn('Konwersja dokladna') else WriteLn('Konwersja w okolicach');
ReadLn;
end.