konwertowaie String na Extended

0

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

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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1