Bardzo dziwna suma |
Bardzo dziwna suma |
28.06.2018, 21:45:25
Post
#1
|
|
Grupa: Zarejestrowani Postów: 107 Pomógł: 0 Dołączył: 30.07.2006 Skąd: Łódź Ostrzeżenie: (0%) |
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? |
|
|
28.06.2018, 21:54:15
Post
#2
|
|
Grupa: Zarejestrowani Postów: 6 761 Pomógł: 1822 Dołączył: 11.03.2014 Ostrzeżenie: (0%) |
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. -------------------- |
|
|
28.06.2018, 22:00:12
Post
#3
|
|
Grupa: Zarejestrowani Postów: 107 Pomógł: 0 Dołączył: 30.07.2006 Skąd: Łódź Ostrzeżenie: (0%) |
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?
|
|
|
1.07.2018, 09:50:15
Post
#4
|
|
Grupa: Zarejestrowani Postów: 1 590 Pomógł: 185 Dołączył: 19.04.2006 Skąd: Gdańsk Ostrzeżenie: (0%) |
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 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 |
|
|
Wersja Lo-Fi | Aktualny czas: 19.04.2024 - 20:53 |