Ĺadny brzuch
Mam w TEdit wartość '1.50', musze wartość String zmienić na Real. Aby to zrobić muszę użyć funkcji StrToFloat(), jednak, aby jej użyć to musze mieć '1,50'. Przy wymnażaniu wartości 1,50 razy np. 2 to wywala błąd, bo musi być 1.50 razy 2.
Jak mam to zrobić? Jeżeli nie zrozumieliście to niech napisze jedna osoba. To postaram się lepiej wytłumaczyć.
procedure TForm1.Button1Click(Sender: TObject); var s:single; begin Edit1.Text:='1.50'; DecimalSeparator:='.'; s:=strtofloat(Edit1.Text); s:='1,50'; DecimalSeparator:=','; Edit1.Text:=floattostr(s*2); end;hmmmm??????
Użytkownik Cyrkiel edytował ten post 22 kwiecień 2005, 19:40
to przed StrToFloat zrób tak:
str := Edit1.Text;
while Pos('.', Str) <> 0 do
Str[Pos('.', Str)] :=',';
Rl := StrToFloat(Str);
PS nie powinno się urzywać w Delphi typu Real, ponieważ pozostał on tylko dla kompatybilności ze starszymi wersjami i jest na dobrą sprawe reprezentowany jako Single.
Działa, jeszcze tylko są problemy z mnożeniem zmiennych Single z tablicy. Nie wiem czemu. W tablicy jest wartość,
Po tykonaniu tych funkcji masz np 1,50 a takiej wartości nie przemnożysz! Musi być 1.50!
Po tykonaniu tych funkcji masz np 1,50 a takiej wartości nie przemnożysz! Musi być 1.50!
StringReplace ??
to sie pobaw danymi regionalnymi czy jakos tak :P
To właśnie jest DecimalSeparator :huh:
Mam w TEdit wartość '1.50', musze wartość String zmienić na Real. Aby to zrobić muszę użyć funkcji StrToFloat(), jednak, aby jej użyć to musze mieć '1,50'. Przy wymnażaniu wartości 1,50 razy np. 2 to wywala błąd, bo musi być 1.50 razy 2.
No i to robi moja procedura. A jak już zmienisz na Real to tam już nie ma ani . ani , bo to jest liczba zapisana na bitach a nie string!!!!!!!!!!! O co ci chodzi z tym , że nie możesz 1,50 przemnożyc przez 2 tylko musi być 1.50?????? Jak masz Real (Sigle, Double czy co tam jeszcze) to tam nie ma separatorów dziesię tnych tam są 0 albo 1, chłopie o co tobie chodzi z tym pytaniem?
Po twoich postać widać, że początkujący jesteś - weź odpalgoogle, wpisz "delphi kurs" i zaczni się uczyć podstaw!!!
Jak masz Real (Sigle, Double czy co tam jeszcze) to tam nie ma separatorów dziesię tnych tam są 0 albo 1, chłopie o co tobie chodzi z tym pytaniem?
To właśnie jest DecimalSeparator :huh:
Dobra. Ale jak 1,50 nie jest pobierane z TEdit tylko ręcznie musze ją przypisać to wajcha :)
Misiekd - od tego wydaje mi sie jest forum. A mój stopień zaawansowania to ty sie niemartw!
//Tak pozatym to dałem sobie rade dzięki poradzie "Cyrkla"
Użytkownik mariuszlorenc edytował ten post 24 kwiecień 2005, 10:57
Dobra. Ale jak 1,50 nie jest pobierane z TEdit tylko ręcznie musze ją przypisać to wajcha :)
(...) dalej nie wiem o co ci chodzi, przecież 1,14 to nie jest liczba ułamkowa tylko dwie liczby całkowite oddzielone przecinkiem!!
Tak, ale podczas konwersji ze stringa na float domyślnie musi być przecinek zamiast kropki ;)
A czy nie można w Edicie poprostu zablokować możliwości wpisania kropki?
if key = '.' then key := #0;
??
dodatek do kodu programisty1101 :
if not ((key in ['1'..'9'])or(key=',')or(key='-')) then key:=#0;
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
Jak mam to zrobić? Jeżeli nie zrozumieliście to niech napisze jedna osoba. To postaram się lepiej wytłumaczyć.
procedure TForm1.Button1Click(Sender: TObject); var s:single; begin Edit1.Text:='1.50'; DecimalSeparator:='.'; s:=strtofloat(Edit1.Text); s:='1,50'; DecimalSeparator:=','; Edit1.Text:=floattostr(s*2); end;hmmmm??????
Użytkownik Cyrkiel edytował ten post 22 kwiecień 2005, 19:40
to przed StrToFloat zrób tak:
str := Edit1.Text;
while Pos('.', Str) <> 0 do
Str[Pos('.', Str)] :=',';
Rl := StrToFloat(Str);
PS nie powinno się urzywać w Delphi typu Real, ponieważ pozostał on tylko dla kompatybilności ze starszymi wersjami i jest na dobrą sprawe reprezentowany jako Single.
Działa, jeszcze tylko są problemy z mnożeniem zmiennych Single z tablicy. Nie wiem czemu. W tablicy jest wartość,
Po tykonaniu tych funkcji masz np 1,50 a takiej wartości nie przemnożysz! Musi być 1.50!
Po tykonaniu tych funkcji masz np 1,50 a takiej wartości nie przemnożysz! Musi być 1.50!

StringReplace ??
to sie pobaw danymi regionalnymi czy jakos tak :P
To właśnie jest DecimalSeparator :huh:
Mam w TEdit wartość '1.50', musze wartość String zmienić na Real. Aby to zrobić muszę użyć funkcji StrToFloat(), jednak, aby jej użyć to musze mieć '1,50'. Przy wymnażaniu wartości 1,50 razy np. 2 to wywala błąd, bo musi być 1.50 razy 2.
No i to robi moja procedura. A jak już zmienisz na Real to tam już nie ma ani . ani , bo to jest liczba zapisana na bitach a nie string!!!!!!!!!!! O co ci chodzi z tym , że nie możesz 1,50 przemnożyc przez 2 tylko musi być 1.50?????? Jak masz Real (Sigle, Double czy co tam jeszcze) to tam nie ma separatorów dziesię tnych tam są 0 albo 1, chłopie o co tobie chodzi z tym pytaniem?
Po twoich postać widać, że początkujący jesteś - weź odpalgoogle, wpisz "delphi kurs" i zaczni się uczyć podstaw!!!
Jak masz Real (Sigle, Double czy co tam jeszcze) to tam nie ma separatorów dziesię tnych tam są 0 albo 1, chłopie o co tobie chodzi z tym pytaniem?

To właśnie jest DecimalSeparator :huh:

Dobra. Ale jak 1,50 nie jest pobierane z TEdit tylko ręcznie musze ją przypisać to wajcha :)
Misiekd - od tego wydaje mi sie jest forum. A mój stopień zaawansowania to ty sie niemartw!
//Tak pozatym to dałem sobie rade dzięki poradzie "Cyrkla"
Użytkownik mariuszlorenc edytował ten post 24 kwiecień 2005, 10:57
Dobra. Ale jak 1,50 nie jest pobierane z TEdit tylko ręcznie musze ją przypisać to wajcha :)

(...) dalej nie wiem o co ci chodzi, przecież 1,14 to nie jest liczba ułamkowa tylko dwie liczby całkowite oddzielone przecinkiem!!
Tak, ale podczas konwersji ze stringa na float domyślnie musi być przecinek zamiast kropki ;)
A czy nie można w Edicie poprostu zablokować możliwości wpisania kropki?
if key = '.' then key := #0;
??
dodatek do kodu programisty1101 :
if not ((key in ['1'..'9'])or(key=',')or(key='-')) then key:=#0;