• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Błędne sumowanie wartości z bazy danych

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
432 wizyt
pytanie zadane 19 września 2017 w SQL, bazy danych przez Q_Nick Mądrala (5,010 p.)
Posiadam bazę danych z której chciałbym zsumować wartość kolumny cost( wartość typu float dodatnia i ujemna), i przy użyciu zapytania "SELECT SUM(cost) FROM bookkeeping" wartość jaką otrzymuje posiada ileśnaście zer po przecinku, gdy wartości mają maksymalnie po dwie. Z czego to może wynikać?

2 odpowiedzi

+1 głos
odpowiedź 19 września 2017 przez Ehlert Ekspert (214,270 p.)
wybrane 19 września 2017 przez Q_Nick
 
Najlepsza

Różnica wynika zapewne stąd, że wyszła Ci liczba wymierna, niemożliwa do zapisanie w systemie z którego korzysta mysql.

Na przyszłość. Pola na pieniądze w bazach danych powinny zawsze być typu decimal. Np. decimal(8,2). Jeśli programujesz w języku z silnym typowanie używaj double​​​​​​. Taka strategia oszczędzić Ci sporo kłopotów.  ​​​​

komentarz 19 września 2017 przez Q_Nick Mądrala (5,010 p.)
Czyli jeśli używam php to powinienem użyć double czy decimal? Dzięki za porządną odpowiedź :D
1
komentarz 19 września 2017 przez Ehlert Ekspert (214,270 p.)
Php nie ma silnego typowania. Używaj money_format i funkcji do precyzji liczb zmoennoprzecinkowych.

Zrób testy funkcjonalne, porównaj wyniki z Excelem.
–1 głos
odpowiedź 19 września 2017 przez Frendom Pasjonat (18,900 p.)
Zależy to pewnie od typu danych który użyjesz. Jeżeli chcesz zminimalizować ilość zer to możesz użyć dodatkowo funkcji round.
komentarz 19 września 2017 przez Q_Nick Mądrala (5,010 p.)
Ale mnie dziwi skąd się biorą te dziwne cyfry po 0, skoro np mam dwa rekordy i obliczenia są 100000-563.98=99436.02001953125 i nie wiem skąd to dodatkowe 0,00001953125
komentarz 19 września 2017 przez Ehlert Ekspert (214,270 p.)
Skoro wychodzą mu niewłaściwe wyniki to funkcja round w takim wypadku w systemie bankowym mogłaby rocznie ukraść kilka milionów złotych. Tak też stało się we Francji tyle, że na giełdzie.
1
komentarz 20 września 2017 przez ukasz112 Początkujący (390 p.)
https://www.dobreprogramy.pl/slepciu/Dlaczego-w-MySQLu-nie-stosowac-typu-FLOAT,30401.html  <-- tutaj znajdziesz pełna odpowiedz na swoje pytanie :)

Podobne pytania

0 głosów
1 odpowiedź 452 wizyt
0 głosów
0 odpowiedzi 154 wizyt
pytanie zadane 27 kwietnia 2019 w SQL, bazy danych przez Shimeo7 Obywatel (1,910 p.)
+1 głos
2 odpowiedzi 607 wizyt
pytanie zadane 25 lutego 2021 w JavaScript przez MarcoPolo Nowicjusz (180 p.)

93,109 zapytań

142,087 odpowiedzi

321,610 komentarzy

62,450 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...