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

Jak wyświetlić liczbę do 6 miejsc po przecinku
  • Rejestracja: dni
  • Ostatnio: dni
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:

Kopiuj
SELECT 1.2345678  as num                       

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

zbynio_k
  • Rejestracja: dni
  • Ostatnio: dni
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

  • Rejestracja: dni
  • Ostatnio: dni
0

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

zbynio_k
  • Rejestracja: dni
  • Ostatnio: dni
0

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

  • Rejestracja: dni
  • Ostatnio: dni
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:

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

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

Kopiuj
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 ?

zbynio_k
  • Rejestracja: dni
  • Ostatnio: dni
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 :)

  • Rejestracja: dni
  • Ostatnio: dni
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 ?

zbynio_k
  • Rejestracja: dni
  • Ostatnio: dni
0

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

Kopiuj
woolfik
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1619
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)

  • Rejestracja: dni
  • Ostatnio: dni
0
woolfik napisał(a)

Nie wiem jakiej uzywasz dystrybucji ...

Używam MSSQL 2005

woolfik
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1619
crowa
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Poznań
  • Postów: 295
0

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

  • Rejestracja: dni
  • Ostatnio: dni
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.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.