Jak wyświetlić liczbę do 6 miejsc po przecinku

0

Jak w komponencie AdoQuery robię jakieś operacje na liczbach ułamkowych, to w wyniku dodaję liczby zawsze zaokrąglone do 4 miejsc. A potrzebuję liczby do 6 miejsc dziesiętnych.

Najprostszy przykład:

SELECT 1.2345678  as num                       

W wyniku będzie 1.2346 czyli zaokrąglona liczba.

0
Pele2 napisał(a)

Jak w komponencie AdoQuery robię jakieś operacje na liczbach ułamkowych, to w wyniku dodaję liczby zawsze zaokrąglone do 4 miejsc. A potrzebuję liczby do 6 miejsc dziesiętnych.

jeśli zawsze dodajesz 4 miejsca po przecinku to jak chcesz otrzymać liczbę 6 miejsc ??
chyba czegoś nie qmam

0

Przecież napisałem w przykładzie liczbę z 6 miejscami dziesiętnymi. A jak wykonam zapytanie dostane liczbę zaokrągloną do 4 miejsc !

0

a jaką deklarację ma num ?
double pewnie zadziała

0
zbynio_k napisał(a)

a jaką deklarację ma num ?
double pewnie zadziała

Nie ma znaczenia do jakiego typu zmiennej to podstawie, jeśli z Query wychodzi już liczba zaokrąglona.
Do double też podstawiałem.
Nawet próbowałem tak:

ShowMessage(FloatToStr(AdoQuery1.Fields[0].AsFloat))

Jedyne co udało mi się osiągnąć to takim sposobem:

SELECT CAST(1.234567 AS VARCHAR(10))

Jako string wyświetla całą liczbę, ale jeśli w moim programie chcę jeszcze wykonać jakieś operacje na wyniku ?

0

haha dopiero teraz zaqmałem co się dzieje
nie znam SQL'a na tyle, żeby ocenić czy to "elegancki" sposób ale jeśli w stringu masz PRAWIDŁOWĄ
liczbę to chyba nic nie stoi na przeszkodzie użyć StrToFloat :)

0
zbynio_k napisał(a)

nic nie stoi na przeszkodzie użyć StrToFloat :)

I tak też robię. Ale ile to zbędnych obliczeń !
I dziwne, że nikt się wcześniej nie spotkał z takim problemem ?

0

być może ktoś bardziej biegły w SQL'u da lepszy pomysł [browar]

0

Nie wiem jakiej uzywasz dystrybucji ale w PostgreSQL masz taki typ jak double precision i ten typ rozwiazuje twoj problem (przynajmniej u mnie na testach wyswietlilo sie tyle miejsc po przecinku ile bylo w bazie)

0
woolfik napisał(a)

Nie wiem jakiej uzywasz dystrybucji ...

Używam MSSQL 2005

0

a moze
SELECT CAST(Liczba AS NUMERIC(14,6))
lub
SELECT ROUND(Liczba, 6)

0

żaden z tych dwóch powyższych przykładów nie zwrócił liczby do 6 miejsc ułamkowych.
Ale zauważyłem, że jeśli w datasecie mam na stałe zdefiniowaną kolumnę typu Float, to liczba jest wyświetlana prawidłowo.
A jak tworzy kolumny dynamicznie to ta kolumna jest typu BCD i wtedy są tylko 4 miejsca ułamkowe.

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