Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem matematyczny JS
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
Tomplus
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?

nospor
Poniewaz tak komputer przetwarza dane rzeczywiste. Normalka smile.gif

Musisz poprostu uzyc zaokrąglenia do dwoch miejsc po przecinku
solificati
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
Tomplus
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.
PrinceOfPersia
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.

Tomplus
@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.
PrinceOfPersia
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
tzm
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?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.