![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 2 Pomógł: 0 Dołączył: 13.11.2012 Ostrzeżenie: (0%) ![]() ![]() |
Witam i proszę o pomoc bo zdębiałem.
Od lat używam w firmie aplikacji php/mysql, która chodziła bezbłędnie aż do czasu ostatniej aktualizacji linuxa i przy okazji MySql'a do 5.5 Mam tabelę w której w kolumnie 'netto' zapisują się liczby z dokładnością do 0.1. Używam formularza dzięki któremu mogę zliczyć ilość zakupionego towaru za podany okres czasu (data od-do). Zapytanie wygląda tak: select sum(netto) from kolory where kind = 'towar' and date >= '$from' and date <= '$to'; Ponieważ owo sumowanie zaczęło wyglądać dziwnie gdyż suma liczb z dokładnością do 0.1 (która jest ilością w kg zakupionego towaru) z całego miesiąca dała taki wynik: 97.89999999999999 Zacząłem badać sprawę zadając to zapytanie od początku miesiąca dodając za każdym razem jeden dzień. Oto wyniki: Dla zakresu od 1-go do 28-go mamy wynik normalny czyli sum działa dobrze i mamy liczbę z jednym miejscem po przecinku: 96.6 Dla zakresu od 1-go do 29-go już: 97.89999999999999 Tylko dla daty 29-go to: 1.3 Dlaczego dodatnie do 96.6 prostej liczby 1.3 nie dało po prostu wyniku 97.9? Dla innych towarów też występuje ten błąd choć dane są inne i nie potrafię dostrzec żadnej prawidłowości. Po prostu w pewnym momencie wynik to cyfra mająca 14 miejsc po przecinku, co przy innych obliczeniach generuje już błędy. Bardzo proszę o pomoc |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Google: floating point precission loss
To Ci nigdy tak na prawdę nie działało poprawnie, teraz jedynie z jakiegoś powodu zmienił Ci się algorytm zaokrąglania przy wyświetlaniu liczby. Do przechowywania liczb rzeczywistych, z zachowaniem precyzji obliczeń powinieneś skorzystać z typu DECIMAL, nie FLOAT/DOUBLE. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 2 Pomógł: 0 Dołączył: 13.11.2012 Ostrzeżenie: (0%) ![]() ![]() |
Dziękuję bardzo, już rozumiem w czym problem!
Ps. Kliknąłem gdzie trzeba (IMG:style_emoticons/default/smile.gif) |
|
|
![]() ![]() |
![]() |
Aktualny czas: 15.09.2025 - 01:48 |