Dziwna rzecz z decimal separatorem

Dziwna rzecz z decimal separatorem
MA
  • Rejestracja:prawie 17 lat
  • Ostatnio:3 miesiące
  • Lokalizacja:Poznań
0

Mam pare gridow, w ktorych wyswietlane sa dane(zmiennoprzecinki). I raz na jakis bardzo rzadki czas, nawala decimalspearator, ktory ustawiam na starcie programu na kropkę. Wiec czasem, wtedy na gridach mam dane z separatorem przecinka. Czy ja tu nawalilem, czy jest jakies wyjasnienie, czemu to sie zdarza ?
Kodu nie ma co pokazywac, po prostu podczas logowania uzytkownika, pobieram oryginalny separator i nadpisuje go kropka. Chyba ze lepiej dac w OnCreate glownej formy to ?

b0bik
  • Rejestracja:około 22 lata
  • Ostatnio:14 dni
  • Postów:1112
0

Za helpem:

{...}

Delphi VCL (non-console) applications will automatically update these formatting variables in response to WM_WININICHANGE messages. Application.UpdateFormatSettings will either allow or not allow changes in system settings. The default is True. Set this property to False to prevent the system settings from changing.

{...}

Jesli masz problem z konwersją mozesz przed konwersją robić:

aStr := StringReplace(aStr, ',', DecimalSeparator, []);
aStr := StringReplace(aStr, '.', DecimalSeparator, []);

b

MA
  • Rejestracja:prawie 17 lat
  • Ostatnio:3 miesiące
  • Lokalizacja:Poznań
0

No, ten cytat troche wyjasnia i ustawie na False tą propercję. Sadzilem ze skoro ustawiam DecimalSpeparator na starcie programu, to on obowiazuje przez caly czas jego trwania.
A drugi sposob jest nieefektywny, majac naprawde duzo insertow do bazy i innych....

Ale dzieki, powinno byc dobrze :P

crowa
  • Rejestracja:ponad 18 lat
  • Ostatnio:około 8 lat
  • Lokalizacja:Poznań
  • Postów:295
0

ja zawsze robilem to w ten sposob.
Tworzylem zmienna globalna
var fDecimalSeparator: Char;
W sekcji inicjalizacji aplikacji, biblioteki etc. przypisywalem

Kopiuj
 fDecimalSeparator := DecimalSeparator;
DecimalSeparator := '.'; 

W sekcji destroy lub w miejscu gdzie konieczna jest zmiana na wartosci oryginalne przywracalem je.
Dodam ze uzywam tego przy budowaniu dosc pokaznych skryptow SQL'owych (naprawde duzych :) ).
Wszelkie operacje typu FloatToStr itp dzialaja poprawnie :)
Ps. Pamietaj ze jesli taki skrypt jest budowany jako polaczenie wielu operacji to dla obiektu dostepowego ADO nalezy na poczatku dodac

Kopiuj
 SET NOCOUNT ON
SET XACT ABORT ON

Tomasz Andrzejewski
Delphi (XE3-XE7) framework engineer @ InterLan
MCP: Microsoft SQL Server 2008, Implementation and Maintenance
b0bik
  • Rejestracja:około 22 lata
  • Ostatnio:14 dni
  • Postów:1112
0
crowa napisał(a)

ja zawsze robilem to w ten sposob.
Tworzylem zmienna globalna
var fDecimalSeparator: Char;
W sekcji inicjalizacji aplikacji, biblioteki etc. przypisywalem

Kopiuj
 fDecimalSeparator := DecimalSeparator;
DecimalSeparator := '.'; 

W sekcji destroy lub w miejscu gdzie konieczna jest zmiana na wartosci oryginalne przywracalem je.

No ale patrząc na tego helpa, to też mogło Ci nie działać w przypadku wymienionego tam komunikatu. Zresztą patrząc na tego helpa to dochodzę też do wniosku że niepotrzebnie się trudziłeś pamiętając oryginalną wersję - jej zmiana w Twojej aplikacji nie miała wpływu na system.

b

Misiekd
  • Rejestracja:ponad 21 lat
  • Ostatnio:ponad 12 lat
  • Postów:7923
0

a nie możecie tego robić po Bożemu???

gdzieś zmienna globalna
fs: TFormatSettings;
i np. w initialization ustawić wszelkie formaty
fs.DecimalSeparator := '-';
a potem w kodzie

Kopiuj
ShowMessage(FloatToStr(StrToFloat('123-45', fs), fs));

i w ^$#*$ mieć to co jest ustawione w systemie


- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij
MA
  • Rejestracja:prawie 17 lat
  • Ostatnio:3 miesiące
  • Lokalizacja:Poznań
0

jesli 'to jest po Bozemu ' to nc.... Podwojna konwersja. Po prostu mam aplikacje dzialajaca niekoniecznie w Polsce, i chce sie trzymac jednego standardu czyli kropki. I najlepiej ustawic DecimalSeparator, niz do kazdej konwersji dodawac ten FS(Ogolnie z bazy od razu ciagne jako string wartosci liczbowe). I ogolnie to dziala OK, tylko raz na bardzo rzadki czas wskakiwal przecinek i nie wiedzialem jak temu zaradzic :-P

zajcev
  • Rejestracja:około 17 lat
  • Ostatnio:ponad 7 lat
0
maciejmt napisał(a)

jeśli 'to jest po Bożemu ' to nc....

nc? no comment? tak kolego programisto.. to właśnie jest PO BOŻEMU... jak próbujesz ustawiać separator systemowy to się tylko na ośmieszenie wystawiasz..

to pewnie jak np. Toyota robiłaby samochody na Niemcy to z samochodu wywaliłbyś amortyzatory?
(nie to żeby mieli wszędzie równe drogi ale przykład dobry)

ty napisz aplikacje ustawiającą na kropkę.. inny programista na przecinek.. klient będzie używać obu aplikacji.. i co? i jesteś w czarnej d*!

Misiekd
  • Rejestracja:ponad 21 lat
  • Ostatnio:ponad 12 lat
  • Postów:7923
0
maciejmt napisał(a)

jesli 'to jest po Bozemu ' to nc.... Podwojna konwersja.
Ty naprawde takim kretynem jesteś? Przecież to jest przykład jak tego używać, ale widać czytanie ze zrozumieniem to trudna sztuka dla niektórych...


- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij
crowa
  • Rejestracja:ponad 18 lat
  • Ostatnio:około 8 lat
  • Lokalizacja:Poznań
  • Postów:295
0

spokojnie :) kazdy sposob jest dobry. Ja nie chcialem pobierac LocaleSetings wiec uzywam DecimalSeparator (dziala dobrze)

PS. zapamietywalem stara wartosc po to zeby np wyswietlac w editach dane zgodne z ustawieniami systemu a do bazy zawsze posylalem '.'


Tomasz Andrzejewski
Delphi (XE3-XE7) framework engineer @ InterLan
MCP: Microsoft SQL Server 2008, Implementation and Maintenance
EL
  • Rejestracja:ponad 18 lat
  • Ostatnio:około 15 lat
0

Wczoraj/dzisiaj miałem podobny problem (zmiana czasu z zimowego na letni). Miałem ustawiony DecimalSeparator na '.' w FormCreate bo tak mi się wydawało najlepiej :| , (aplikacja działała przez noc). Wszystkie liczby zmiennoprzecinkowe pozapisywało mi z ','. Niestety akurat przez nieprzemyślenie serie liczb były separowane ',' i zrobił mi się totalny groch z kapustą :-/ Ale teraz już wiem dlaczego ;) Dzięki za wyjaśnienie.

EgonOlsen
  • Rejestracja:ponad 17 lat
  • Ostatnio:ponad 12 lat
0

A moze by tak sprawdzic ustawienia lokalne systemu?


<img src="http://www.siglaunch.com/sigs/wow/6/2/7/2/5/1762725HEdyN.png" alt="user image" />
I am he who watches they. I am the fist of retribution. That which does quell the recalcitrant. Dare you defy the Warchief? Dare you face my merciless judgement?
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:32 minuty
0
b0bik napisał(a)

ZDelphi VCL (non-console) applications will automatically update these formatting variables in response to WM_WININICHANGE messages.

Windows 7 ma buga przez co VCL może czasami pobierać zły format z systemu. Dotyczy to nawet Delphi 2010. Żeby to obejść, trzeba dodać w pliku dpr wywołanie SetThreadLocale i GetFormatSettings:

Kopiuj
begin
  // windows 7 locale bug workaround: sometimes wrong thread locale id gets reported,
  // causing sysutils time and number formatting functions to misbehave. this'll fix:
  SetThreadLocale(LOCALE_USER_DEFAULT);
  GetFormatSettings;

  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.

Szczegóły techniczne dlaczego tak się czasem dzieje tu.

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)