Edit i mnożenie jego zawartości

0

Witam w polu edit mam wartość 17.8909 i che ją pomnożyć przez 2 i teraz muszę ją pobrać z edita wiem ze w edit są dane typu string i je muszę prze konwertować do Real

pomsrednica : Real

pomsrednica:=  StrToFloat(Edit5.Text);
pomsrednica:=pomsrednica *2;
Edit85.Text:= FloatToStr(pomsrednica);

program się kompiluje ale podczas wczytywania wyskakuje błąd

"17.8909 " is not a valid floating point value.

prosze o pomoc nie wiem jak to rozwiązać .

0

Wartości zmiennoprzecinkowe wprowadzaj z przecinkiem a nie kropką. Wszystko jeszcze zależy od ustawień regionalnych w systemie.

1

https://www.freepascal.org/docs-html/rtl/sysutils/strtofloatdef.html + ustaw odpowiedni separator w TFormatSettings

0

A dzięki. Ale potrzebuje właśnie z kropką bo później kopiuje dane do innego programu. Ale jak bym zrobił ze pobieram dane do stringa w nim zmieniam kropkę na przecinek konwertuje , mnożę i analogicznie w drugą stronę czyli zmiana na przerobienie na string zamiana z przecinka na kropkę i zapis do edit.

0

Też tak można z tą zamianą kropki na przecinek. Jednak to jest trochę nieeleganckie rozwiązanie. TFormatSettings jest do tego bardzo dobra metodą.

0

Tylko nie wiem jak to działa.

0
function StrToFloatDef(
  const S: string;
  const Default: Extended;
  const FormatSettings: TFormatSettings
):Extended;

użycie:

var Diameter: Extended;
var FormatSettings: TFormatSettings;
begin
  FormatSettings.DecimalSeparator := '.';
  { Edit5 to najgorsza nazwa kontrolki jaką możesz mieć }
  Diameter := StrToFloatDef(DiameterEdit.Text, 0.0, FormatSettings);
  { ... }
end;
0
var Diameter: Extenderd;

podczas kompilacji wyświetla błąd ze Extenderd nigdzie nie został zdeklarowany.

0

Extended - tym zmiennej zmiennoprzecinkowej.
Jest zresztą w deklaracji kawałek wyżej.

0

@Marcin F: jeżeli koniecznie chcesz użyć kropki jako separatora dziesiętnego i jednocześnie nie chcesz zmieniać formatowania to skorzystaj z procedury Val – kropka jest dla niej natywna, w przeciwieństwie do przecinka.

Nie jest ona zbyt wygodna w obsłudze – przez wymagany parametr dla kodu błędu – ale można ją opakować:

uses
  SysUtils;

  function TextToReal(const AText: String): Real;
  var
    LCode: Integer;
  begin
    Val(AText, Result, LCode);

    if LCode > 0 then
      raise EConvertError.CreateFmt('"%s" is an invalid float', [AText]);
  end;
0

tak na szybko to można wykorzystać zmienną globalną decimalseparator

pomsrednica:=  StrToFloat(replacestr(Edit5.Text,'.',decimalseparator));

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