Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Problem matematyczny JS, Z pozoru banalne.
Tomplus
post 22.12.2014, 10:08:09
Post #1





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 230
Dołączył: 20.03.2005
Skąd: Będzin

Ostrzeżenie: (0%)
-----


Mam taką prostą funkcję: (w rzeczywistości jest bardziej skomplikowana, ale wynik jest taki sam). Działa na mojej stronie, działa tak offline, oraz online np. w tym narzędziu do testowania JS (i PHP):
http://writecodeonline.com/javascript/
  1. var a = eval(23.5);
  2. var b = eval(11.01);
  3. var c = eval(11.62);
  4. var wynik;
  5. wynik = a + b + c;
  6. document.write('wynik: '+ wynik);


Nie znalazłem nigdzie pomocy, ale dlaczego wynik tego prostego równania wynosi: 46.129999999999995 zamiast 46.13?

Go to the top of the page
+Quote Post
nospor
post 22.12.2014, 10:12:30
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Poniewaz tak komputer przetwarza dane rzeczywiste. Normalka smile.gif

Musisz poprostu uzyc zaokrąglenia do dwoch miejsc po przecinku


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
solificati
post 22.12.2014, 10:14:47
Post #3





Grupa: Zarejestrowani
Postów: 26
Pomógł: 10
Dołączył: 17.03.2012

Ostrzeżenie: (0%)
-----


Bo 46.13 nie można przedstawić w skończonej reprezentacji o bazie 2.

http://docs.oracle.com/cd/E19957-01/806-35...g_goldberg.html
Go to the top of the page
+Quote Post
Tomplus
post 22.12.2014, 10:20:02
Post #4





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 230
Dołączył: 20.03.2005
Skąd: Będzin

Ostrzeżenie: (0%)
-----


To wiele wyjaśnia acz można się zirytować przy takich błędach. No cóż. dzięki za odpowiedzi.

Znalazłem prostą, a jakże, funkcję która to zaokrągla.

Kod
function Round(n, k)
{
    var factor = Math.pow(10, k);
    return Math.round(n*factor)/factor;
}
ze strony: http://www.yarpo.pl/2011/03/06/js-zaokragl...a-dokladnoscia/


Temat do zamknięcia.

Ten post edytował Tomplus 22.12.2014, 10:20:44
Go to the top of the page
+Quote Post
PrinceOfPersia
post 22.12.2014, 13:16:13
Post #5





Grupa: Zarejestrowani
Postów: 717
Pomógł: 120
Dołączył: 18.04.2009

Ostrzeżenie: (0%)
-----


no ale po co tak, skoro możesz użyć metody toFixed?
https://developer.mozilla.org/pl/docs/Web/J.../Number/toFixed

Kod
wynik.toFixed(2)

i masz to, co chcesz.

albo sztuczka z:
Kod
~~(wynik * 100) / 100


Cytat
var a = eval(23.5);
var b = eval(11.01);
var c = eval(11.62);

użycie tu funkcji eval nie ma sensu....

Cytat
document.write('wynik: '+ wynik);

jak będziesz używał funkcji document.write (której nie powinno się używać, tak jak evala), to twój następny wątek na forum będzie pod tytułem "czemu mi się strona się nie wczytuje, jest białe tło" (bo tak działa document.write właśnie, że kasuje całą zawartość strony, po wczytaniu).

console.log jest lepsze do testowania.



--------------------
Go to the top of the page
+Quote Post
Tomplus
post 22.12.2014, 13:28:52
Post #6





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 230
Dołączył: 20.03.2005
Skąd: Będzin

Ostrzeżenie: (0%)
-----


@PrinceOfPersia
Jak napisałem wyżej. Po wyjaśnieniach nospora i solificati znalazłem odpowiedź, a raczej, konieczność jaką musiałem podjąć.

a co do document.write i console.log. Wiem o tym, ale testowałem na stronie którą podałem w zapytaniu i tam console.log nie działa, a zalecana jest funkcja którą ja zapisuje.
Go to the top of the page
+Quote Post
PrinceOfPersia
post 22.12.2014, 14:35:56
Post #7





Grupa: Zarejestrowani
Postów: 717
Pomógł: 120
Dołączył: 18.04.2009

Ostrzeżenie: (0%)
-----


działa przecież console.log na tej stronie, jak się otworzy konsolę wink.gif

co do document.write, to niby tutaj nie ma to znaczenia, ale ogólnie mnie to zawsze razi. Podobnie jak eval.
Nie razi mnie bez powodu ofc - natomiast tak jak mówisz, rozwiązany problem, więc nie ma o czym rozmawiać smile.gif


--------------------
Go to the top of the page
+Quote Post
tzm
post 25.12.2014, 22:22:29
Post #8





Grupa: Zarejestrowani
Postów: 675
Pomógł: 58
Dołączył: 17.12.2013

Ostrzeżenie: (10%)
X----


Cytat(PrinceOfPersia @ 22.12.2014, 14:35:56 ) *
działa przecież console.log na tej stronie, jak się otworzy konsolę wink.gif

co do document.write, to niby tutaj nie ma to znaczenia, ale ogólnie mnie to zawsze razi. Podobnie jak eval.
Nie razi mnie bez powodu ofc - natomiast tak jak mówisz, rozwiązany problem, więc nie ma o czym rozmawiać smile.gif



echo albo print_r też Cie razi?
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 Wersja Lo-Fi Aktualny czas: 21.06.2025 - 12:35