kropka i przecinek LICZBY

0

do podzialu liczb na czesci dzeisietne itd sluzy ogolnie przecinek ja w bazie mam kropke i jak biore

strtoint('45.45'); to wiadomo wywali blad

jak zrobic by przyjmowalo liczby z kropkaki tak jak z przecinkami ?

0

StrToInt('45.45') nie może działać, bo i tak Integer jest typem całkowitym - może tak:

var
  s: string;
  e: extended;
begin
  s := '45.45';
  e := StrToFloat(StringReplace(s, '.', ',', []));
0

ale replace trwa bardzo dlugo na pliku ktory ma 1 mb z liczbami :(
czy innaczej jeszce da sie?

0

troche bezmyślnie żeś walnął bo int to typ integer a typ zmiennoprzecinkowy ti float -> czyli strtofloat(). A jeżeli chodzi o kropke i przecinek, to zróbb prostego parsera...

0

parsera czyli?
mam dane w stringu i wrzucam je do tabeli i wlasnie niektore kolumny maja dane w formacie 45.56 ... jak zrobic by szybko wczytywalo to jako float?

0

A nie możesz zamieniać bezpośrednio przy operacjach ?

0

ok pwiedzmy ze ten czas juz jakos strawie - czy jest mozliwosc sprawdzenia czy w systemie (windowsie) przecinek czy kopka stanowi separator (panel sterownia/opcje regionalne/dostsuj

0

Do podziału liczb na części całkowite i ułamkowe wcale nie służy przecinek, ale znak rozdzielający ustawiony w Ustawieniach regionalnych. Do pobrania tego znaku możesz wykorzystać :
GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SDECIMAL,...., ....)
Wszelkie funkcje typu StrToFloat oczekują właśnie tego znaku. Jeśli użytkownik ma ustawioną kropkę (jako znak rozdzielający), a w kodzie zamieniasz kropki na przecinki, no to wyskoczy Error!

Ale skoro w bazie masz liczby w "systemie kropkowym" to wykorzystaj procedurę Val !

0

dokladnie o to mi chodzilo (m oze troche zle sie wyslowilem :p) dzeiki za pomoc

GetLocaleInfo(LOCALE_USER_DEFAULT,LOCALE_SDECIMAL,pchar(znak),0);
showmessage(znak);

zwraca mi: `

zmienialem jeszce ustawienia a panelu sterowania i tu sie ni nie zmienia

0

Ludzie, po co sobie utrudniać życie?
A od czego jest

decimalSeparator

??

0

GetLocaleInfo(LOCALE_USER_DEFAULT,LOCALE_SDECIMAL,pchar(znak),0);
showmessage(znak);

To nie ma prawa zadziałać !

Przeczytaj dokładnie opis funkcji GetLocaleInfo !

Ale Juhas ma rację.
Po prawidłowym użyciu GetLocaleInfo(..LOCALE_SDECIMAL..) dostaniemy DecimalSeparator.

0

var znaki:char
GetLocaleInfo(LOCALE_USER_DEFAULT,LOCALE_SDECIMAL,@znaki,1);
showmessahe(znaki);

dziala bo sprawdzilem

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