Wątek przeniesiony 2014-01-11 18:48 z Delphi i Pascal przez olesio.

Kalkulator statystyczny - zamiana typu String na Double

0

Witam. Mam Pewien problem. Muszę stworzyć kalkulator statystyczny. Niestety pojawił mi się problem przy zamianie typu string na double na etapie przypisania wartości danej komórki tabeli do tablicy. Postępowałam analogicznie do przykładu z książki. Nie wiem, gdzie robię błąd, czy też jest to problem tego, że używam Lazarusa....

procedure TForm1.Button2Click(Sender: TObject);
const maxroz=1000;
var
   tab: Array[0..maxroz] of Double;
   a: string;
   t: single;
begin
with StringGrid1 do
  for i:=0 to ColCount-1 do
  begin
    StringGrid1.Cells[i,0]:=a;
    t:=StrToFloat(a);
    tab[i]:=t;
  end;

end;

zamiana znacznika <code class="php"> na <code class="delphi"> - fp

0
tab[i]:=StrToFloat(StringGrid1.Cells[i,0]);
0

Dalej pokazuje, że jest błąd:
"..raised expectation class 'EConvertError' with message:
" " is an invalid float"

0

A którego słowa z tego

" " is an invalid float"
nie rozumiesz?

0

Invalid - nieprawidłowy
float to typ liczby rzeczywistej
więc chyba znam znaczenie tych słów, tylko nie wiem, w jakim momencie mojej pracy ten błąd się pojawia...

Jeżeli wiesz, w czym tkwi problem, prosiłabym o wytłumaczenie tego, bo takie odpowiedzi chyba niewiele mówią osobom początkującym :)

0

A co widzisz przed "is" - tobie wyraźnie powiedziano że pusty napis to niepoprawny format liczby zmiennoprzecinkowej.

0

@mademoiselle53: Twierdzisz, że rozumiesz komunikat, a dalej pytasz jakbyś nie wiem - urwał się z choinki. To dlaczego to pytanie nie jest w Newbie. Tam porzenoszę. Wracając do "problemu" Czy według Ciebie spacja jest prawidłową liczbą zmienno przecinkową? Uzyj po prostu albo TryStrToFloat, albo StrToFloatDef i tyle.

0

*UrwałA, a nie urwał.
Dziękuję za Waszą pomoc, jeżeli dobrze zrozumiałAM Wasze komentarze, to chodzi o to, że niby pojawia się spacja w komórce moje StringGrida, ale tak się składa, że wpisuję normalnie dane i nie ma żadnej spacji :)

0

No to albo nie pobierasz z tej komórki co chcesz. Albo przekazujesz do funkcji coś po skopiowaniu fragmentu i jest to kopiowanie niewłaściwie. Skorzystaj po prostu z jednej z tych funkcji, o której wspomniałem i tyle. Upierasz się, że podajesz prawidłową wartość. Jeżeli by tak było, to na pewno wystąpił by ten wyjątek.

0

A nazwy kolumn/wiersz masz?
Czyli FixedRows / FixedCols ?

0

Nie mam ich, ustawiłam je na zero we właściwościach, bo są mi nie potrzebne. Ponad to jest to prosta tablica jednowymiarowa, ma 1 wiersz i n kolumn, przy czym program wcześniej prosi o ilość danych do kalkulatora, i ustawiam to jako ColCount.

0

to pokaż kod po poprawce.

0

Mam dziwne wrażenie, że nie wpisujesz wszędzie danych.

0

Przecież poprawiłam tak, jak podałeś, to się pojawia po wprowadzeniu danych z klawiatury do komórki.

babubabu - wpisuję w każdą komórkę dane. Wiem, że na podstawie moich wypowiedzi uważacie, że mam totalnie zerową wiedzę z programowania, bo pewnie tak jest. Ale wpisać dane z klawiatury, chyba jeszcze potrafię...

0

Witam. Proponuję zmienić zakres pętli for z i:=0 na i:=1 i ColCount - 1 na ColCount. To samo się tyczy drugiego rozmiaru tablicy tzn. z 0 na 1.

0

Albo nie potrafisz wpisać dane z klawiatury, albo nie potrafisz przepisać treść błędu. Z treści błędu wynika że próbujesz skonwertować pusty napis, więc jest jeszcze jedno podejrzenie - masz totalnie zerową wiedzę z programowania i nie odpowiednio wstawiłaś to co powiedziałem.

0

Próbowałam tak z tą pętlą od początku, to wtedy miałam jeszcze inny problem. Wyskakiwało: Index out of Range [Col=1,Row=1].

Natomiast funkcje np. StrToFloatDef rozumiem, że gdy mam złą wartość w komórce, to nie zajdzie konwersja i ustali mi "domyślną" wartość. Ale dalsze obliczenia w moim programie, nie będą poprawne...

_13th_Dragon - Twoje podejrzenie, że mam totalnie zerową wiedzę może jest prawdziwe, ciężko jest zrozumieć tę dziedzinę, kiedy prowadzący nie przekazuje żadnej wiedzy. Z książek wszystkiego nie zrozumiesz, zwłaszcza, jeśli nie masz do tego "talentu". Uwierz mi, zależy mi jedynie na zdaniu tego przedmiotu, a nie na byciu wspaniałym programistą. Umiem przepisać treść , jaką mi podałeś i umiem podać dane z klawiatury. Możliwe, że jest to kwestia Lazarusa, który w wielu już przypadkach odstawiał mi takie cyrki. Pomimo Twojego mało uprzejmego komentarza, dziękuję za pomoc,mimo, że się nie przydała :)

0

Lazarus nie odstawia cyrków, odstawiają cyrki nieudolni programiści. A skoro nie możesz podać kodu po poprawce to czekaj na wróżkę - programistkę.

0

@mademoiselle53
Właściwie dlaczego nie chcesz pokazać poprawionego kodu?

0

Ale nie powiedziałam, że nie chcę pokazać poprawionego kodu. Powiedziałam, że zrobiłam tak, jak zasugerował jeden z użytkowników. Temat już nieaktualny. Po n-tym podejściu działa. Dziękuję za pomoc :)

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