🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.delphi.bazy-danych
10 messages
10 total messages Started by Bartek Thu, 05 Jun 2014 16:59
DBText, postgres i dużo za dużo miejsc po przecinku
#82185
Author: Bartek
Date: Thu, 05 Jun 2014 16:59
28 lines
2149 bytes
Witam
Podpowiedzcie proszę jak pozbyć się takiego dziwactwa.
Mam bazę na postgresie, pole typu real.

W delphi na formularzu mam liczbę którą wprowadzam z kontrolki Edit. Liczbę 
tą wprowadzam do edita, potem zapisuję w bazie, potem chce ją odczytać z 
bazy i umieścić w komponencie DBText. I faktycznie początek jest taki sam 
jak w bazie ale potem pojawia się jeszcze dużo więcej miejsc po przecinku 
niż to co mam w bazie.

Całość robię tak
Wpisuję liczbę do edita, np. 12,34
Zamieniam przecinek na kropkę bo postgres nie przyjmuje mi przecinka tylko 
kropkę.
W bazie, w tabeli jak patrzę prze pgAdmina to liczna wygląda tak: 12.34, 
czyli wg mnie ok.
Następnie gdy chcę odczytać tą liczbę i wstawić ją do DBText to zamiast 
12.34 po odczytaniu z tego z bazy pokazuje mi się liczba która ma znacznie 
więcej miejsc po przecinku niż liczba którą wprowadziłem która jest w bazie, 
np. zamiast 12.34 mam 12.347380896632, przy czym ilość miejsc po przecinku 
jest za każdym razem inna, i różna dla każdej liczby.
Możecie podpowiedzieć jak to ograniczyć np. do dwóch znaków po przecinku, 
tak jak w bazie?



Pozdrawiam
Bartek
Re: DBText, postgres i dużo za dużo miejsc po przecinku
#82186
Author: Bartek
Date: Thu, 05 Jun 2014 17:03
48 lines
3000 bytes
Dodam tylko że wstawiam to do DBText w ten sposób:
   Ulista_samochody.Form_lista.ZQuery_lista.Connection := Zconnection_baza;
   Ulista_samochody.Form_lista.ZQuery_lista.Active;
   Ulista_samochody.Form_lista.ZQuery_lista.Close;
   Ulista_samochody.Form_lista.ZQuery_lista.Open;

   Ulista_samochody.Form_lista.DataSource_lista.DataSet := 
Ulista_samochody.Form_lista.ZQuery_lista;
   Ulista_samochody.Form_lista.DBGrid1.DataSource := 
Ulista_samochody.Form_lista.DataSource_lista;


   Ulista_samochody.Form_lista.DBText1.DataSource := 
Ulista_samochody.Form_lista.DataSource_lista;
   Ulista_samochody.Form_lista.DBText1.DataField := 'cena';


Użytkownik "Bartek"  napisał w wiadomości grup 
dyskusyjnych:lmq7l7$49a$1@news.task.gda.pl...

Witam
Podpowiedzcie proszę jak pozbyć się takiego dziwactwa.
Mam bazę na postgresie, pole typu real.

W delphi na formularzu mam liczbę którą wprowadzam z kontrolki Edit. Liczbę
tą wprowadzam do edita, potem zapisuję w bazie, potem chce ją odczytać z
bazy i umieścić w komponencie DBText. I faktycznie początek jest taki sam
jak w bazie ale potem pojawia się jeszcze dużo więcej miejsc po przecinku
niż to co mam w bazie.

Całość robię tak
Wpisuję liczbę do edita, np. 12,34
Zamieniam przecinek na kropkę bo postgres nie przyjmuje mi przecinka tylko
kropkę.
W bazie, w tabeli jak patrzę prze pgAdmina to liczna wygląda tak: 12.34,
czyli wg mnie ok.
Następnie gdy chcę odczytać tą liczbę i wstawić ją do DBText to zamiast
12.34 po odczytaniu z tego z bazy pokazuje mi się liczba która ma znacznie
więcej miejsc po przecinku niż liczba którą wprowadziłem która jest w bazie,
np. zamiast 12.34 mam 12.347380896632, przy czym ilość miejsc po przecinku
jest za każdym razem inna, i różna dla każdej liczby.
Możecie podpowiedzieć jak to ograniczyć np. do dwóch znaków po przecinku,
tak jak w bazie?



Pozdrawiam
Bartek
Re: DBText, postgres i dużo za dużo miejsc po przecinku
#82188
Author: R.e.m.e.K
Date: Thu, 05 Jun 2014 17:54
10 lines
1322 bytes
Dnia Thu, 5 Jun 2014 18:59:16 +0200, Bartek napisał(a):

> Możecie podpowiedzieć jak to ograniczyć np. do dwóch znaków po przecinku, 
> tak jak w bazie?

http://blog.it-studio.net.pl/dlaczego-nie-korzystac-z-typu-float/

-- 
pozdro
R.e.m.e.K
Re: DBText, postgres i dużo za dużo miejsc po przecinku
#82194
Author: miab
Date: Thu, 05 Jun 2014 18:00
29 lines
2462 bytes
W dniu 2014-06-05 18:59, Bartek pisze:
> Witam
> Podpowiedzcie proszę jak pozbyć się takiego dziwactwa.
> Mam bazę na postgresie, pole typu real.
>
> W delphi na formularzu mam liczbę którą wprowadzam z kontrolki Edit.
> Liczbę tą wprowadzam do edita, potem zapisuję w bazie, potem chce ją
> odczytać z bazy i umieścić w komponencie DBText. I faktycznie początek
> jest taki sam jak w bazie ale potem pojawia się jeszcze dużo więcej
> miejsc po przecinku niż to co mam w bazie.
>
> Całość robię tak
> Wpisuję liczbę do edita, np. 12,34
> Zamieniam przecinek na kropkę bo postgres nie przyjmuje mi przecinka
> tylko kropkę.
> W bazie, w tabeli jak patrzę prze pgAdmina to liczna wygląda tak: 12.34,
> czyli wg mnie ok.
> Następnie gdy chcę odczytać tą liczbę i wstawić ją do DBText to zamiast
> 12.34 po odczytaniu z tego z bazy pokazuje mi się liczba która ma
> znacznie więcej miejsc po przecinku niż liczba którą wprowadziłem która
> jest w bazie, np. zamiast 12.34 mam 12.347380896632, przy czym ilość
> miejsc po przecinku jest za każdym razem inna, i różna dla każdej liczby.
> Możecie podpowiedzieć jak to ograniczyć np. do dwóch znaków po
> przecinku, tak jak w bazie?

Np. tak ',0.00' albo tak '#.##'
Poczytaj o DisplayFormat.

miab
Re: DBText, postgres i dużo za dużo miejsc po przecinku
#82189
Author: R.e.m.e.K
Date: Thu, 05 Jun 2014 18:05
9 lines
1396 bytes
Dnia Thu, 5 Jun 2014 19:54:38 +0200, R.e.m.e.K napisał(a):

> http://blog.it-studio.net.pl/dlaczego-nie-korzystac-z-typu-float/

http://www.dobreprogramy.pl/slepciu/Dlaczego-w-MySQLu-nie-stosowac-typu-FLOAT,30401.html

-- 
pozdro
R.e.m.e.K
Re: DBText, postgres i dużo za dużo miejsc po przecinku
#82187
Author: wloochacz
Date: Thu, 05 Jun 2014 18:20
74 lines
4217 bytes
W dniu 2014-06-05 19:03, Bartek pisze:
> Dodam tylko że wstawiam to do DBText w ten sposób:
>    Ulista_samochody.Form_lista.ZQuery_lista.Connection := Zconnection_baza;
>    Ulista_samochody.Form_lista.ZQuery_lista.Active;
Co to jest i po co??

>    Ulista_samochody.Form_lista.ZQuery_lista.Close;
>    Ulista_samochody.Form_lista.ZQuery_lista.Open;
A dlaczego tak? Rozumiem, że samo open nie starczywszy?
Oczywiście, że wystarczy...
>
>    Ulista_samochody.Form_lista.DataSource_lista.DataSet :=
> Ulista_samochody.Form_lista.ZQuery_lista;
>    Ulista_samochody.Form_lista.DBGrid1.DataSource :=
> Ulista_samochody.Form_lista.DataSource_lista;
>
>
>    Ulista_samochody.Form_lista.DBText1.DataSource :=
> Ulista_samochody.Form_lista.DataSource_lista;
>    Ulista_samochody.Form_lista.DBText1.DataField := 'cena';
WTF?

> Użytkownik "Bartek"  napisał w wiadomości grup
> dyskusyjnych:lmq7l7$49a$1@news.task.gda.pl...
>
> Witam
> Podpowiedzcie proszę jak pozbyć się takiego dziwactwa.
> Mam bazę na postgresie, pole typu real.
Dziwactwem jest używanie typów zmiennoprzecinkowych do przetrzymywania 
danych, które takimi nie są.
Wiesz, że KAŻDA baza danych posiada typu stałoprzecinkowe?
Deklaruje się je tak: numeric(19,4)
Inni używają numeric(15,2), ale osobiście uważam to za mały błąd.

> W delphi na formularzu mam liczbę którą wprowadzam z kontrolki Edit.
Dlaczego nie TDBEdit?

> Liczbę
> tą wprowadzam do edita, potem zapisuję w bazie, potem chce ją odczytać z
> bazy i umieścić w komponencie DBText.
Umieścić?
Samo się tam umieści - wystarczy podpiąć DataSource i wybrać pole.

> I faktycznie początek jest taki sam
> jak w bazie ale potem pojawia się jeszcze dużo więcej miejsc po przecinku
> niż to co mam w bazie.
OK, to poczytaj co Ci REMEK napisał (aczkolwiek ten art jest po łebkach 
pisany - chyba jakiś chłopak od PHP go zmajstrował ;-))

> Całość robię tak
> Wpisuję liczbę do edita, np. 12,34
> Zamieniam przecinek na kropkę bo postgres nie przyjmuje mi przecinka tylko
> kropkę.
> W bazie, w tabeli jak patrzę prze pgAdmina to liczna wygląda tak: 12.34,
> czyli wg mnie ok.
Nie jest OK.

> Następnie gdy chcę odczytać tą liczbę i wstawić ją do DBText to zamiast
Co zrobić? Wstawić? A jak ją wstawiasz do DBText?

> 12.34 po odczytaniu z tego z bazy pokazuje mi się liczba która ma znacznie
> więcej miejsc po przecinku niż liczba którą wprowadziłem która jest w
> bazie,
> np. zamiast 12.34 mam 12.347380896632, przy czym ilość miejsc po przecinku
> jest za każdym razem inna, i różna dla każdej liczby.
> Możecie podpowiedzieć jak to ograniczyć np. do dwóch znaków po przecinku,
> tak jak w bazie?
Po pierwsze - zmienić typ w bazie danych, najlepiej na taki, który 
odpowiadał by TCurrencyField w Delphi - czyli numeric(19,4).
Po drugie przeczytać ten wpis na blogu i zawsze stosować się do rady miaba.


-- 
wloochacz
Re: DBText, postgres i dużo za dużo miejsc po przecinku
#82190
Author: wloochacz
Date: Thu, 05 Jun 2014 18:25
19 lines
2081 bytes
W dniu 2014-06-05 20:05, R.e.m.e.K pisze:
> Dnia Thu, 5 Jun 2014 19:54:38 +0200, R.e.m.e.K napisał(a):
>
>> http://blog.it-studio.net.pl/dlaczego-nie-korzystac-z-typu-float/
>
> http://www.dobreprogramy.pl/slepciu/Dlaczego-w-MySQLu-nie-stosowac-typu-FLOAT,30401.html
Ale to nie na temat jest... tam pisza o MySQL :D
Poza tym, stać Cię na znalezienie lepszego artykułu ;-)
W żadnym z nich nie wspomniano o reprezentacji liczb 
zmiennoprzecinkowych, tylko knują jakieś niestworzone teorie w stylu: 
"SQL zaokrągla zapisane liczby do bardzo zbliżonych."...

A wystarczy Wikipedia:
http://pl.wikipedia.org/wiki/Liczba_zmiennoprzecinkowa
Tylko przeczytać trzeba ze zrozumieniem, a to może być wyzwaniem co dla 
niektórych...

-- 
wloochacz
Re: DBText, postgres i dużo za dużo miejsc po przecinku
#82191
Author: R.e.m.e.K
Date: Thu, 05 Jun 2014 20:40
27 lines
2243 bytes
Dnia Thu, 05 Jun 2014 20:25:53 +0200, wloochacz napisał(a):

>>> http://blog.it-studio.net.pl/dlaczego-nie-korzystac-z-typu-float/
>>
>> http://www.dobreprogramy.pl/slepciu/Dlaczego-w-MySQLu-nie-stosowac-typu-FLOAT,30401.html
> Ale to nie na temat jest... tam pisza o MySQL :D

No tak, MySQL jest tu wyjatkiem :-P

> Poza tym, stać Cię na znalezienie lepszego artykułu ;-)

Szukalem ...odpowiedniego, ten na wiki tez chcialem dac, ale...

> W żadnym z nich nie wspomniano o reprezentacji liczb 
> zmiennoprzecinkowych, tylko knują jakieś niestworzone teorie w stylu: 
> "SQL zaokrągla zapisane liczby do bardzo zbliżonych."...
> 
> A wystarczy Wikipedia:
> http://pl.wikipedia.org/wiki/Liczba_zmiennoprzecinkowa
> Tylko przeczytać trzeba ze zrozumieniem, a to może być wyzwaniem co dla 
> niektórych...

...ano wlasnie ;-)

-- 
pozdro
R.e.m.e.K
Re: DBText, postgres i dużo za dużo miejsc po przecinku
#82192
Author: Bartek
Date: Sun, 08 Jun 2014 14:42
49 lines
2739 bytes
Witam

Dziękuje wszystkim za podpowiedź, zrobiłem tak jak radziliście i tak jak w 
tych opisach.
I pomogło - teraz działa tak jak powinno.

A przy okazji da się zrobić coś takiego żeby przy wyświetlaniu wartości w 
polu DBText można było dodać jeszcze np. zł
Z labelem to nie ma problemu bo Label.Caption := jakas_zmienna + 'zł';

No a jak to zrobić z DBText-em?

Dane do niego ładuje tak

DBText11.DataSource := DataSource_lista_k;
DBText11.DataField := 'paliwo_cena';



Użytkownik "R.e.m.e.K"  napisał w wiadomości grup 
dyskusyjnych:5390d5a5$0$2236$65785112@news.neostrada.pl...

Dnia Thu, 05 Jun 2014 20:25:53 +0200, wloochacz napisał(a):

>>> http://blog.it-studio.net.pl/dlaczego-nie-korzystac-z-typu-float/
>>
>> http://www.dobreprogramy.pl/slepciu/Dlaczego-w-MySQLu-nie-stosowac-typu-FLOAT,30401.html
> Ale to nie na temat jest... tam pisza o MySQL :D

No tak, MySQL jest tu wyjatkiem :-P

> Poza tym, stać Cię na znalezienie lepszego artykułu ;-)

Szukalem ...odpowiedniego, ten na wiki tez chcialem dac, ale...

> W żadnym z nich nie wspomniano o reprezentacji liczb
> zmiennoprzecinkowych, tylko knują jakieś niestworzone teorie w stylu:
> "SQL zaokrągla zapisane liczby do bardzo zbliżonych."...
>
> A wystarczy Wikipedia:
> http://pl.wikipedia.org/wiki/Liczba_zmiennoprzecinkowa
> Tylko przeczytać trzeba ze zrozumieniem, a to może być wyzwaniem co dla
> niektórych...

...ano wlasnie ;-)

-- 
pozdro
R.e.m.e.K 
Re: DBText, postgres i dużo za dużo miejsc po przecinku
#82193
Author: wloochacz
Date: Sun, 08 Jun 2014 15:29
24 lines
2163 bytes
W dniu 2014-06-08 16:42, Bartek pisze:
> Witam
>
> Dziękuje wszystkim za podpowiedź, zrobiłem tak jak radziliście i tak jak
> w tych opisach.
> I pomogło - teraz działa tak jak powinno.
>
> A przy okazji da się zrobić coś takiego żeby przy wyświetlaniu wartości
> w polu DBText można było dodać jeszcze np. zł
> Z labelem to nie ma problemu bo Label.Caption := jakas_zmienna + 'zł';
>
> No a jak to zrobić z DBText-em?
>
> Dane do niego ładuje tak
>
> DBText11.DataSource := DataSource_lista_k;
> DBText11.DataField := 'paliwo_cena';
Da się, wpisz to sobie np w zdarzeniu AfterOpen DataSet'a:

DataSet.FieldByName('paliwo_cena') as TNumericField).DisplayFormat := 
',0.00 zł';

-- 
wloochacz
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads