![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 35 Pomógł: 0 Dołączył: 4.06.2007 Ostrzeżenie: (0%) ![]() ![]() |
Witam.
Mam bazę danych w której wartości są typu float. Niestety zorientowałem się, że będą w niej zapisywane większe wartości więc muszę zmienić typ na DOUBLE. Operacja taka, niestety sprawia, że wartości w tabelce dostają głupie wartości, bardzo wiele różnych cyfr po przecinku np z liczby 345.26 robi się 345.260009765625 itp...Gdy z powrotem zmieniam na float jest wszystko ok. Jak najprościej i najbezpieczniej zrobić zmiany typu na double, żeby nie było takich krzaczków? Pozdrawiam. |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Przyjaciele php.pl Postów: 1 595 Pomógł: 282 Dołączył: 24.09.2007 Skąd: Reda, Pomorskie. Ostrzeżenie: (0%) ![]() ![]() |
po zmianie typu danych puść zapytanie:
to ci ładnie zaokrągli wszystkie double do 2 miejsc po przecinku... -------------------- - Oh no, my young coder. You will find that it is you who are mistaken, about a great many things... - |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 35 Pomógł: 0 Dołączył: 4.06.2007 Ostrzeżenie: (0%) ![]() ![]() |
Witam ponownie. Dzięki za podpowiedź, ale niestety już tak próbowałem i problem polega na tym, że niektóre liczby nie wiadomo dlaczego bierze sobie z kosmosu, jakieś dziwne wartości po zmianie na double, tak więc nawet po zaokrągleniu powstają dziwne liczby np:
z 176111 robi 176110.91 z 170673 robi 170673.37 z 38147.4 robi 38147.44 itd... Mam w tabelce około 3 tyś rekordów, i sprawdzanie które są ok a które się rozsypały jest trochę uciążliwe.... Ten post edytował emjot27 4.09.2008, 07:25:12 |
|
|
![]()
Post
#4
|
|
![]() Grupa: Przyjaciele php.pl Postów: 1 595 Pomógł: 282 Dołączył: 24.09.2007 Skąd: Reda, Pomorskie. Ostrzeżenie: (0%) ![]() ![]() |
no to spróbuj tak:
1. dodaj do tabeli nowe_pole typu DOUBLE (nie zmieniaj typu pola FLOAT) 2. wykonaj:
3. usuń z tabeli stare pole 4. zmień nazwę nowego pola na właściwą nie gwarantuję, że zadziała, ale warto spróbować. -------------------- - Oh no, my young coder. You will find that it is you who are mistaken, about a great many things... - |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 35 Pomógł: 0 Dołączył: 4.06.2007 Ostrzeżenie: (0%) ![]() ![]() |
Witam ponownie.
Dzięki za naprowadzenie, niestety Twoja metoda też nie pomogła gdyż efekt był identyczny z poprzednim i stwarzał rekordy o kosmicznych wartościach. Zauważyłem jednak, że w tym przypadku ewidentnie fiksuję sam mysql a że do tej pory wszelkie operacje próbowałem robić tj mi to zaproponowałeś na samym mysql, postanowiłem go trochę oszukać i zrobić to w PHP. Zrobiłem więc taki manewr, tj mi poleciłeś dodałem do tabelki dodatkowe pole typu DOUBLE pt "nowe_pole" ale bez żadnych parametrów i zaokrągleń. Następnie pod PHPem wczytałem wszystkie wartości pola typu float do tablicy po czym uaktualniłem nimi rekordy w w polach typu DOUBLE. Poszło bezbłędnie. Napisałem taki kod:
Teraz jest ok ![]() Pozdrawiam i dzięki za pomoc. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.08.2025 - 23:22 |