Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Bardzo dziwna suma
Forum PHP.pl > Forum > Bazy danych > MySQL
busterek
Witajcie,
Mam w bazie danych serię danych. Są to liczby zapisane w polu typu varchar z przecinkiem jako znak dziesiętny. Do wyświetlania tych danych nie stanowiło to problemu. Niestety teraz trzeba to sumować. Niby zadanie proste. Wybrałem sposób z funkcją str_replace, a następnie wynik funkcji dodaję i już. I wszystko byłoby pięknie, gdyby nie suma, która się wyświetla. Otóż pojawią się tam po kilku miejscach po przecinku 1. w danych tego nie ma. Zacząłem sprawdzać po stronie bazy danych. Wynik zapytania select sum(replace(pole, ',', '.') from tabela; daje ten sam efekt. Co jest grane?questionmark.gif
trueblue
Naprawdę uważasz, że VARCHAR to dobry typ dla liczb zmiennoprzecinkowych?

https://www.google.com/search?q=liczby+zmie...zecinkowe+błędy

Jeśli chcesz mieć superdokładność, to https://dev.mysql.com/doc/refman/8.0/en/fix...oint-types.html, jeśli nie, i akceptujesz takie błędy, to nadal lepszym typem będzie FLOAT lub DOUBLE.
busterek
Pracuję na takich danych, jakie dostałem. Poprawiam trochę interfejs aplikacji napisanej przez kogoś ponad 10 lat temu. Chyba był średnio ogarnięty. No ale cóż. Czyli co? zamienić w danych funkcją REPLACE przecinek na kropkę i zmienić typ pola na float? Będzie bezpieczniej?
Pilsener
Cytat
Poprawiam trochę interfejs aplikacji napisanej przez kogoś ponad 10 lat temu
- no to robisz standardowy feedback, że ponieważ ktoś kiedyś zaoszczędził trochę kasy to teraz zrobienie sumy jest praktycznie niemożliwe - praktycznie, bo w teorii można posiedzieć nad tym dwa tygodnie, zrobić refaktoryzację i uprzedzić klienta, że czasem 2+2 będzie 5. Im mniej się dłubie w takich apkach tym lepiej, bo potem klient niezadowolony, że tydzień poprawiałeś jakąś literówkę powodując przy tym kilka innych smile.gif
Miałem niedawno taką aplikację, cena towarów w bazie wyglądała mniej więcej tak:

0,001
20,23
23.45
23 34
gratis
23,000.34
24.000,00
Ziutek, tu nie ma ceny!!
34 000,-
1500 minus 10%

I teraz rób z tego matematykę, powodzenia smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.