![]() |
![]() |
-greg87g- |
![]()
Post
#1
|
Goście ![]() |
witam,
problem pewnie będzie banalny, ale nie bardzo wiem jak mogę szukać rozwiązania. dlaczego podczas działania:
wartosci zwracane to: 0.9 ; 0.8; 0.7000000000000001; 0.6000000000000001; 0.5000000000000001 ; 0.40000000000000013 itd? dlaczego 0.1 nie zawsze równa się 0.1? |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 589 Pomógł: 91 Dołączył: 22.05.2008 Skąd: Gliwice Ostrzeżenie: (0%) ![]() ![]() |
Ogólnie - JS źle liczy
![]()
Zaokrąglaj liczby i porównuj te zaokrąglone i będzie okej ![]() -------------------- Moja gra - scraby.io
|
|
|
-greg87g- |
![]()
Post
#3
|
Goście ![]() |
Ogólnie - JS źle liczy ![]() ale jak to tak, komputer źle liczy? trzeba mu zaokrąglić każdą liczbę na wypadek gdyby sobie coś za dużo dodał lub odjął? coś mi to nie pasuje. czy jest zatem jakiś sposób (bez obchodzenia do okoła z calym tym zaokrągleniem) żeby łagodnie zmniejszyć css.opacity? |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 2 178 Pomógł: 596 Dołączył: 25.09.2009 Skąd: Piwniczna-Zdrój Ostrzeżenie: (0%) ![]() ![]() |
To nie problem związany z JavaScript, ale problem z precyzją liczb zmiennoprzecinkowych. Maszyna nie potrafi dokładnie policzyć wartości przy operacjach na takich właśnie liczbach.
Trzeba zaokrąglać. @down: Nie, JS nie liczy dobrze, bo 0.2 - 0.1 to jednak 0.1, a nie 0.1000000000000001..., ale z takimi obliczeniami nie tylko JS sobie nie radzi. Ten post edytował mortus 6.09.2011, 11:29:30 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 4 298 Pomógł: 447 Dołączył: 16.11.2006 Ostrzeżenie: (0%) ![]() ![]() |
Tak, jQuery .animate() lub .fade()
![]() edit: @up dlatego to Ty właśnie masz to ustalić jak daną liczbę ma wyświetlić poprzez zastosowanie odpowiedniej funkcji bo niby skąd maszyna ma wiedzieć o co Ci chodzi? Skoro nawet nie wie że 7 jest pomiędzy 5 a 8 ![]() Ten post edytował !*! 6.09.2011, 11:33:27 -------------------- Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta). |
|
|
-greg87g- |
![]()
Post
#6
|
Goście ![]() |
dzieki *!* wygląda na to że o animate mi chodziło, zaraz jeszcze poczytam ale już widze ze to to.
a tak swoją drogą to też jestem zdania że jeśli 0.7-0.1 nie równa się 0.6 to błąd leży tylko po stronie komputera. dlaczego komputer ma wymagac od nas abyśmy określili czy ma zadanie wykonać prawidłowo czy nie? zdaję sobie sprawe ze komputer nie rozumie zasad logiki i nic ponad to co się w niego włoży nie "wymyśli", ale zrozumiałym jest wtedy stwierdzenie ze liczy źle jeśli liczy źle (nawet jeśli zgodnie z zaprogramowaniem) |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 4 298 Pomógł: 447 Dołączył: 16.11.2006 Ostrzeżenie: (0%) ![]() ![]() |
Akurat alert(0.7-0.1); wyświetli prawidłowo. Maszyna jest precyzyjna.
![]()
Ten post edytował !*! 6.09.2011, 12:01:40 -------------------- Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta). |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 589 Pomógł: 91 Dołączył: 22.05.2008 Skąd: Gliwice Ostrzeżenie: (0%) ![]() ![]() |
Oczywiście moje
Cytat Ogólnie - JS źle liczy ![]() Należy odebrać tak półserio. Całość oczywiście polega na sposobie reprezentacji liczb zmiennoprzecinkowych w pamięci, tak jak już napisano. Wiedziałem że uda mi się znaleźć- http://webhosting.pl/Co.wam.doskwiera.w.Ja...wad.tego.jezyka punkt 9. a raczej bardziej patrz komentarze pod wpisem co do tego punktu. Myślę że to wszystko wyjaśni. -------------------- Moja gra - scraby.io
|
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Jest taka prosta zasada: nigdy nie porównuj liczb zmiennoprzecinkowych operatorem porównania. Liczby te działają na przybliżeniach, a nie na realnych wartościach. 0.3 czy 0.1 to takie książkowe przykłady działania na przybliżeniach. Jeżeli potrzebujesz precyzji przy takich operacjach musisz skorzystać z innego, już nie prymitywnego, typu danych.
Do poczytania: - Wiki: liczby zmiennoprzecinkowe - Google: porównywanie liczb zmiennoprzecinkowych |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 13:05 |