Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 2 Pomógł: 0 Dołączył: 16.12.2009 Ostrzeżenie: (0%)
|
Witam,
ostatnio spotkałem się z dość dziwną sytuacją. Zrobiłem programik w PHP który zlicza mi pewne dane typu float z bazy mySQL. Operacje obliczeniowe wykonało samo zapytanie SQL-a. Problem pojawia mi się dopiero wtedy gdy zaczynam mnożyć przez siebie liczby które mają np jedno miejsce po przecinku, np. gdy pomnoże: 2*5,3 to wynik jest 10,6 ale gdy pomnoże 3*5,3 to wynik jest 15,8999999999999998 zauważyłem że jeśli pomnożył bym 5,3 razy wielokrotność liczby 3 to również będzie zwracalo jakieś głupoty. Przeciesz oczywiste jest że wynik powinien wyjść 15,9 a nie 15,899999998 Skąd te błędy? Zauważyłem również, że w javascript gdy mnoże dwie wartości z pól edit przez siebie to sytuacja jest identyczna. Dla przykładu podam jeszcze, że np 3*5,4 = 16.200000000000003 - a nie jak powinno być 16,2. Skąd się biorą te błędy i jak je wyeliminować? z góry dzięki za odpowiedzi. |
|
|
|
![]() |
Post
#2
|
|
|
Grupa: Zarejestrowani Postów: 2 Pomógł: 0 Dołączył: 16.12.2009 Ostrzeżenie: (0%)
|
Tak właśnie mam teraz zrobione, tzn. zmieniłem wszystkiem float na double i tak działa dobrze.
Dzięki double mogę przy pomocy sqla zadać takie zapytanie, żeby zwrócił mi sumę iloczynów. Gdy operacji było by dużo to przy float pojawił by się już taki błąd, że zaokrąglenie późniejsze w php nie przyniosło by efektu bo wynik mógłby się różnić od prawidłowej wartości. zaokrąglanie - to jest dość odczywiste, ale nie rozwiązuje przyczyny problemu. Myślę czy czasem nie ma jakiegoś parametru w samym serwerze apacha, który by poprawiał tę "wadę". W javasripcie będę musiał wykorzystać zaokrąglanie bo chyba nic innego nie pozostaje. Może faktycznie, procesor tak to dziwnie liczy (IMG:style_emoticons/default/smile.gif) . Dzięki za odpowiedzi, jeśli coś by się komuś jeszcze nasunęło na myśl dajcie znać. Może jest jakieś inne rozwiązanie podłoża problemu. Pozdrawiam |
|
|
|
memic Problem z mnożeniem typów float - z pozoru proste 16.12.2009, 23:41:36
darko w php wyeliminujesz poprzez zaokrąglenie
w js też
... 16.12.2009, 23:54:01
skowron-line @darko w JS to lepiej toFixed( param ); 17.12.2009, 00:04:46
nmts Cytatjak je wyeliminować?
Może zamiana na typ dou... 17.12.2009, 00:15:53
Zyx Nie da się tego wyeliminować. Jak niby wyobrażasz ... 17.12.2009, 08:59:04
wookieb Można wyeliminować.
http://pl.php.net/manual/en/b... 17.12.2009, 10:21:40
thek Jak wspomniano, wynika to z niedoskonałości zapisu... 17.12.2009, 12:40:56 ![]() ![]() |
|
Aktualny czas: 28.12.2025 - 20:42 |