Ĺadny brzuch
ponieważ nie znalazłem odpowiedniej funkcji zaokrąglającej liczby do dwuch miejsc po przecinku (może ktoś jednak taką zna?) napisałem ją:
String TForm1::dziesietne(String liczba) { String s; TSysCharSet sep = TSysCharSet() << '.' << '\t'; TStringList* list = new TStringList(); s = liczba; ExtractStrings(sep,sep,s.c_str(),list); if (list->Count == 2) { if (list->Strings[1].Length() == 1) s+="0"; else if (list->Strings[1].Length() > 2) { if (list->Strings[1].operator [](2) < 5) { ShowMessage("Zaokrąglij w dol"); String temp = list->Strings[0]; temp+="."; temp+=list->Strings[1].operator [](0); temp+=list->Strings[1].operator [](1); s = temp; } else { ShowMessage("Zaokrąglij w gore"); String temp = list->Strings[0]; temp+='.'; temp+=list->Strings[1].operator [](0); int i = StrToInt(list->Strings[1].operator [](1)); i++; temp+=IntToStr(i); s = temp; } } } delete list; return s;
i problem jest w tym, że funkcja działa tylko gdy jest 1 miejsce po przecinku (dodaje zero na koniec) lub 2 miejsca. w przeciwnym wypadku pojawia się błąd:
"Project FakturyUE.exe raised exception class EAccessViolation with Message 'Access violation at address 40009720 in module rtl60.bpl. Read of address E9BC2603'. Process Stopped. Use Step or Run to continue"
i otwiera się plik 'dstring.h'
Czy wie ktoś co jest w tej funkcji nie tak i jak to naprawić?
Twój kod jest dość niezrozumiały powiedz do czego on ma służyć i podaj cały kod; a jeśli chodzi o dwa miejsca po przecinku to możesz samemu napisać odpowiedznią funkcję to banalne. Dlaczego uwazam twoj kod za niezrozumialy, dlatego ze brak w nim komentarzy i przejzystosci
a może tak zrobić:
double a= 2.123456;
int b=a*100;
a=(double)b/100;
edit
jest jedna wada zaokrągla w dół
edit2
wersja poprawiona
double a= 32.124456;
a=a*100+0.5;
int b=a;
a=(double)b/100;
Użytkownik pablo295 edytował ten post 04 grudzień 2005, 23:05
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
String TForm1::dziesietne(String liczba) { String s; TSysCharSet sep = TSysCharSet() << '.' << '\t'; TStringList* list = new TStringList(); s = liczba; ExtractStrings(sep,sep,s.c_str(),list); if (list->Count == 2) { if (list->Strings[1].Length() == 1) s+="0"; else if (list->Strings[1].Length() > 2) { if (list->Strings[1].operator [](2) < 5) { ShowMessage("Zaokrąglij w dol"); String temp = list->Strings[0]; temp+="."; temp+=list->Strings[1].operator [](0); temp+=list->Strings[1].operator [](1); s = temp; } else { ShowMessage("Zaokrąglij w gore"); String temp = list->Strings[0]; temp+='.'; temp+=list->Strings[1].operator [](0); int i = StrToInt(list->Strings[1].operator [](1)); i++; temp+=IntToStr(i); s = temp; } } } delete list; return s;
i problem jest w tym, że funkcja działa tylko gdy jest 1 miejsce po przecinku (dodaje zero na koniec) lub 2 miejsca. w przeciwnym wypadku pojawia się błąd:
"Project FakturyUE.exe raised exception class EAccessViolation with Message 'Access violation at address 40009720 in module rtl60.bpl. Read of address E9BC2603'. Process Stopped. Use Step or Run to continue"
i otwiera się plik 'dstring.h'
Czy wie ktoś co jest w tej funkcji nie tak i jak to naprawić?
Twój kod jest dość niezrozumiały powiedz do czego on ma służyć i podaj cały kod; a jeśli chodzi o dwa miejsca po przecinku to możesz samemu napisać odpowiedznią funkcję to banalne. Dlaczego uwazam twoj kod za niezrozumialy, dlatego ze brak w nim komentarzy i przejzystosci
a może tak zrobić:
double a= 2.123456;
int b=a*100;
a=(double)b/100;
edit
jest jedna wada zaokrągla w dół
edit2
wersja poprawiona
double a= 32.124456;
a=a*100+0.5;
int b=a;
a=(double)b/100;
Użytkownik pablo295 edytował ten post 04 grudzień 2005, 23:05