Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Zamiana pola z typu FLOAT na DOUBLE, Problem z wartościami po przecinku...
emjot27
post
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.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
nevt
post
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:
  1. UPDATE `tabela` SET `pole` = ROUND(`pole`, 2);

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... -
Go to the top of the page
+Quote Post
emjot27
post
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
Go to the top of the page
+Quote Post
nevt
post
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:
  1. UPDATE`tabela` SET `nowe_pole` = `stare_pole`;

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... -
Go to the top of the page
+Quote Post
emjot27
post
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:

  1. <?php
  2. $sql_sprawdz = "SELECT * FROM `tabela`";
  3. $wynik = mysql_query($sql_sprawdz);
  4. while($wiersz_sel=mysql_fetch_array($wynik))
  5. {
  6. $sql_up = "UPDATE `tabela` SET `nowe_pole` = ".$wiersz_sel['stare_pole']." WHERE `id`= ".$wiersz_sel['id']." ";
  7. $wynik_up = mysql_query($sql_up);
  8. }
  9. ?>

Teraz jest ok winksmiley.jpg
Pozdrawiam i dzięki za pomoc.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 23:22